我需要更多关于视锥体剔除的理论,以更好地理解如何实现它。我知道光线投射是为了弄清楚前面有什么物体,从而找出不渲染的物体。
我担心 CPU 使用率。据我了解,我应该按相机的宽度*高度投射光线,并且可能会根据相机看到的距离增加光线的数量。此外,我必须将其乘以场景中的对象数量,以验证哪个最接近光线。
我对这个概念的理解准确吗?我究竟怎样才能更有效地做到这一点?
编辑:
目标是实现某种类型的体素引擎,其中世界可以使用八叉树进行细分。它可能由数十万个立方体组成。
我需要更多关于视锥体剔除的理论,以更好地理解如何实现它。我知道光线投射是为了弄清楚前面有什么物体,从而找出不渲染的物体。
我担心 CPU 使用率。据我了解,我应该按相机的宽度*高度投射光线,并且可能会根据相机看到的距离增加光线的数量。此外,我必须将其乘以场景中的对象数量,以验证哪个最接近光线。
我对这个概念的理解准确吗?我究竟怎样才能更有效地做到这一点?
编辑:
目标是实现某种类型的体素引擎,其中世界可以使用八叉树进行细分。它可能由数十万个立方体组成。
我不认为视锥体剔除通常涉及光线投射。
通常,您只需对所有几何图形进行 z 变换,然后剪裁顶点落在视口之外的任何多边形,或者其 z 值大于或小于近/远剪裁平面的多边形。
光线投射会更昂贵,因为您实际上是在测试视口中的每个像素以查看其后面是否有一个多边形,这可能是 NUMBER_OF_PIXELS * NUMBER_OF_POLYGONS 数学运算,而不仅仅是 NUMBER_OF_POLYGONS。
编辑:
哦,我明白了:您正在尝试创建一个像 Minecraft 这样的体素空间世界。这有点不同。
诀窍是利用您知道世界是一个网格的事实,以避免对被靠近相机的立方体遮挡的几何图形进行计算。
我仍然不确定光线投射是最好的方法——我怀疑你想要一个像八叉树结构这样的东西,它可以让你快速丢弃大量的块,但我会让有更多经验的人来构建这样的东西称量体重 ;-)
编辑2:
看起来 StackOverflow 上的其他人也有同样的问题(并且他们使用了八叉树):用于渲染大量立方体的剔除技术