3D视图视锥体剔除,射线铸件

时间:2012-08-19 00:15:09

标签: view 3d raycasting frustum culling

我需要关于视锥体剔除的其他理论,以便更好地理解如何实现它。我知道光线投射是为了弄清楚前面有什么物体,从而弄清楚哪些物体不能渲染。

我担心CPU使用率。根据我的理解,我应该按照相机的宽度*高度投射光线,并根据相机看到的距离增加光线量。另外,我必须将它乘以场景中的物体量来验证哪个物体最接近射线。

我对这个概念的理解是否准确?我怎样才能更有效地做到这一点?

编辑:

目标是实现某种类型的体素引擎,其中世界可以使用oct-tree进行细分。它可能包含数十万个立方体。

1 个答案:

答案 0 :(得分:2)

我认为视锥体剔除通常不涉及光线投射。

通常,您只需对所有几何进行z变换,然后剪切其顶点落在视口之外或其z值大于或小于近/远剪裁平面的任何多边形。

光线投射将会更加昂贵,因为您实际上是在视口中测试每个像素以查看其后面是否有多边形,这可能是NUMBER_OF_PIXELS * NUMBER_OF_POLYGONS个数学运算,而不仅仅是NUMBER_OF_POLYGONS。

编辑:

哦,我明白了:你正在努力创造像Minecraft这样的体素空间世界。那有点不同。

这里的技巧是利用这样一个事实:你知道世界是一个网格,以避免对靠近相机的立方体遮挡的几何进行计算。

我仍然不确定光线投射是最好的方法 - 我怀疑你想要像oct-tree结构这样的东西让你快速丢弃大量的块,但我会让一些人有更多的经验建造这样的东西; - )

编辑2:

看起来StackOverflow上的其他人有同样的问题(他们使用了八叉树):Culling techniques for rendering lots of cubes