我需要更多关于视图截体剔除的理论来更好地理解如何实现它。我理解光线投射是为了找出哪些对象在前面,从而找出哪些对象不渲染。
我很担心CPU的使用情况。据我所知,我应该根据相机的宽度*高度来投射光线,并根据相机能看到的距离来增加光线的数量。此外,我必须将其乘以场景中的对象数量,以验证哪个离光线最近。
我对这个概念的理解准确吗?我怎样才能更有效率地做这件事呢?
编辑:
目标是实现某种类型的体素引擎,其中可以使用八叉树对世界进行细分。它可能由数十万个立方体组成。
发布于 2012-08-19 00:24:44
我不认为视图视锥剔除通常涉及光线投射。
通常,您只需对所有几何体进行z变换,然后裁剪其顶点位于视口外部或其z值大于或小于近/远裁剪平面的任何多边形。
光线投射的开销要大得多,因为您实际上是在测试视口中的每个像素,以查看其后面是否有多边形,这可能是NUMBER_OF_PIXELS * NUMBER_OF_POLYGONS数学运算,而不仅仅是NUMBER_OF_POLYGONS。
编辑:
哦,我明白了:你正在尝试创建一个像“我的世界”这样的体素空间世界。这有点不同。
这里的诀窍是利用这样一个事实,即你知道世界是一个网格,以避免对被离相机更近的立方体遮挡的几何体进行计算。
我仍然不确定光线投射是不是最好的方法--我怀疑你想要一种类似于八叉树结构的东西,它可以让你快速丢弃大量的块,但我会让一些有更多构建经验的人参与进来;-)
编辑2:
看起来StackOverflow上的其他人也有同样的问题(他们使用八叉树):Culling techniques for rendering lots of cubes
https://stackoverflow.com/questions/12023249
复制相似问题