我在我的系统中实现了截锥体剔除,它测试了每个物体的边界球体上的平截头体平面,并且效果很好。 (我发现PlaneVsAabb检查不需要)
然而,网格的边界球体会根据其绑定姿势进行调整,因此当网格开始移动时(例如玩家用他的剑攻击),一些顶点可能会离开球体。
这通常导致网格被剔除,尽管有一些顶点应该被渲染(例如玩家的剑离开了球体)。
我可以想到两个可能的解决方案:
对于每个帧中的每个网格,根据骨骼变化计算其新的边界球体。 (我不知道如何从这开始...)这可能效率太低了吗?
为每个球体半径添加固定偏移量(基于整个网格尺寸?),因此即使动画也不会有网格被剔除。
答案 0 :(得分:3)
(1)实时效率低下是的。但是,您可以通过计算最大可能的边界球静态(即加载时)来混合使用两者。在(2)中使用它可以保证比你组成的一些任意偏移更好的结果。
答案 1 :(得分:1)
(1)您可以将定位器添加到关键元素(例如剑尖上的虚拟骨骼)并在制作动画时转换它们的原点。您可以在每次更新时在CPU上完成它,然后计算边界框或边界球。或者,您可以离线预先计算每个动画帧的边界体积。 Doom3使用第二种方法。