我正在用C ++编写游戏,并且有一个由许多单独的网格组成的关卡,每个网格都有自己的顶点缓冲区。我正在使用vmmlib(辉煌的自由gl compat。矢量/矩阵库)来创建我的视锥体剔除者并对照该级别中每个网格的边界球体进行测试。遗憾的是,我的关卡可以包含多达800个网格,并且迭代遍历所有网格,每个帧都很慢。什么是优化代码的最佳方法,以便我不必在每次迭代时查看所有网格?截头体内的边界体积?
答案 0 :(得分:4)
是边界对象是要走的路,你应该注意选择足够的边界体积,例如对于像机器人一样在场景中移动的网格而不是躺在圆柱体上是最好的体积,其他更好的代表立方体(轴对齐或不对齐)。
然后创建一个四叉树或八叉树来分层划分网格数据。
这适用于户外截头剔除。
对于室内,BSP是最好的方式,因为你有很多墙可以分隔你的空间。您仍然应该对包含10个以上多边形的网格进行体积限制。
答案 1 :(得分:3)
答案 2 :(得分:3)
我只想补充一点,现在一天门户网站通常比BSP更受欢迎,但我没有足够的声誉来编辑原始帖子。