接着此文往下聊
从三个方面考虑:
硬件
图元
几何
1.硬件
硬件主要是像素操作,像素和屏幕分辨率有关。像素值是从1到几千的无符号整形值,比如最常见的1920*1080
以上图为例,拾取轮胎。轮胎记录的是所有像素值,当鼠标点击一个像素时,只需要计算鼠标像素值和轮胎像素值的距离。这种计算效率非常高,就算整个屏幕计算一遍,现在普通CPU计算时间也在微秒级别。硬件最喜欢的就是无符号整型运算,运算简单,占用空间少,性能好。目前这种简单的像素计算都在GPU上实现,如果有好一些的GPU,性能会更好。
单从硬件层面实现看,拾取和图形渲染相关,所以使用图形渲染必然是效率最高的。
2. 图元
这里的图元是指渲染引擎生成的数据,以OpenGL为例,显示的普遍使用三角形数据。一个长方形,就由两个三角形构成。
从图元数据看,所有的数据都是三角形,所以拾取计算以三角形和直线的求交为主。这种计算也是非常成熟的参数计算方法,性能较好。
一个用圆心和半径定义的圆形,图元数据是离散成16/32/64等多边形的三角形,离散精度越高,显示效果越好。如图:
离散成16边的圆形(Wireframe模式显示)
其它复杂的曲面也是离散成三角形,拾取时候计算曲面对应的一组三角面片。
3.几何
最后从几何角度来看。
以下一个非参数的曲面,拾取时需要计算其垂直直线和曲面的交点。对于非参数的曲面,一般采用迭代算法。只要用迭代,性能必然差。
单从性能方面考虑,图元拾取普遍高于几何拾取的
但在CAD/CAE以及前后处理软件中,需要处理各种业务逻辑和数据,业务场景,同时要考虑到软件架构和复杂度。
这里介绍了几何和图元的关系,点击链接查看:
在实践中,一般不会单调用API,而是会做各种加速计算,比如
使用树结构
局部操作
LOD( Level Of Detail)
数据合并
不管是几何还是图元,这些操作都会起到加速作用。
从软件架构看,如果使用几何拾取,则可以使用单向映射,即几何更新,刷新图元,而不是相反;
而如果使用图元拾取,则需要双向映射,甚至三向映射,比如点的拾取,图元精度不够,需要映射到几何顶层拓扑结构,再遍历映射到几何点,增加了系统复杂度。
性能是做拾取时需要考虑的内容,但是对于拾取技术的采用,需要综合考虑软件架构,技术选型,第三方组件以及业务实际需求,而不能单看拾取性能。
联系客服