我是新来的挑选。乍一看,似乎大多数遮挡剔除算法都是对象级的,而不是检查单个网格,这对于游戏渲染是实用的。
我要找的是一个算法,它可以剔除一个对象中的所有网格,这些网格是为一个给定的视点遮挡的,具有很高的精度它至少需要O(n logn),一个简单的逐网格比较(O(n^2))太慢。
我注意到Blender图形用户界面为您实时识别被遮挡的网格,即使您使用10000多个网格的大型对象。请问那里用的是什么算法?

最佳答案

Blender根据子弹物理库中的动态aabb树加速结构,执行视锥剔除和遮挡剔除。封堵器和对象由它们的包围体(轴对齐包围盒)来表示。
视图截锥剔除只是遍历aabb树,给定一个相机截锥。
遮挡剔除基于遮挡缓冲区,一种使用非常简单的软件渲染器初始化的深度缓冲区:使用动态aabb树加速结构的基本光线跟踪器。您可以选择遮挡缓冲区的分辨率来权衡精度与效率。
另请参见文档http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.49/Game_Engine#Performance
从Blender源树执行Blender:
blender\source\gameengine\Physics\Bullet\ccdpphysicsenvironment.cpp方法
bool ccdphysicsenvironment::cullingtest(phy_cullingcallback回调,void*userdata,phy_u vector4*planes,int nplanes,int clusionres)
子弹物理SDK在Mulk/ExtAs/CDTestFrand中有一些C++示例代码。

10-08 17:03