2008-10-07 84 views
2

我正在用C++编写游戏,并且有一个包含许多独立网格的级别,每个网格都有自己的顶点缓冲区。我使用vmmlib(辉煌的免费gl compat。矢量/矩阵库)来创建我的平截球体剔骨,并在关卡中对每个网格的边界球进行测试。可悲的是,我的水平可以包含多达800个网格,并遍历所有网格,每个帧都很慢。优化代码的最佳方法是什么,以便我不必在每次迭代中查看所有网格?在平截头体内部包围体积?Optimize Frustum Culling

回答

4

是边界对象是要走的路,你应该小心选择一个合适的边界体积,例如对于像僵尸一样在场景中移动的网格,不要躺在圆柱体上是最好的体积,其他更好的体现按立方体(轴对齐或不对齐)。

然后,您创建四叉树或八叉树以分层划分网格数据。

这适用于户外frustrum扑杀。

对于室内来说,BSP是最好的选择,因为你有很多墙来划分你的空间。您仍然应该对包含多于10个多边形的网格进行卷绑定。

3

我只想补充一点,现在几天的门户网站通常优先于BSP或与BSP结合使用,但我没有足够的信誉来编辑原始帖子。