我读了一些关于它我想做一些实现使用这个。但我有一些疑问。deaabb的问题是物体必须与轴对齐,否则你必须每帧重新计算bbox,对吗?重新计算代价大吗?那精度呢,你能做出一个碰撞树来细分盒子吗?它如何与AABB合作?
OBB指向对象旋转,对吧?你必须在游戏初始化之前构建树。我读到它很难实现,而且有点昂贵,但我在精度上得到了很多。但如果物体在游戏中旋转,bbox是否会"自动"重新计算其旋转?
哪一个在游戏中最常用,为什么?
提前感谢:)
AABBs、OBBs、Spheres、Capsules…这取决于你正在运行的模拟类型和你的约束(通常是实时应用程序)是什么。
你需要评估利弊,然后做出相应的选择。例如,使用aabb的测试非常快,但是当对象旋转时需要重新计算aabb。但是,如果您正在处理非常复杂的对象并处理BVH,则更新aabb树非常快,因为您只需要重新计算("从头开始")底部的aabb,从子aabb构造更高的aabb。使用obb,测试成本更高,但如果处理的是刚性对象,则不需要重新计算obb。
如果你决定使用可变形的对象,AABB树(或球体树)绝对是一个更好的主意,因为你的树无论如何都需要更新。
问题是:哪个开销更大,是更新aabb树造成的开销,还是使用obb进行重叠测试造成的开销?所有这些都取决于你的模拟:对象复杂性,每秒平均CD测试等等。您可以找到基于不同形状的不同方法(BVH、网格……)的不同CD库的一些基准测试,针对特定问题进行测试。这是一个你可能会感兴趣的例子。
关于实现,因为所有这些在几年前就已经研究过了,并且在许多库中实现过,所以您应该不会有任何问题。你可以看看克里斯特·埃里克森的实时碰撞检测,所有这些问题都得到了很清楚的回答和解释。
你也可以在不同的形状之间使用混合,例如一个用于宽阶段,另一个用于窄阶段(一旦你到达树叶),但你可能不需要这样的东西
AFAIK,大多数物理引擎使用AABBs +扫描和修剪算法进行大阶段的碰撞检测。树对于动态对象之间的碰撞检测几乎是无用的。然而,树可以成功地用于静态几何
de AABB的问题是对象必须与轴对齐,否则你必须每帧重新计算bbox对吧?
是的,每次改变身体方向时都必须重新计算AABB。但对于盒子、胶囊、锥状体和圆柱体来说,这是一个非常便宜的手术。对于多边形模型的AABB计算肯定更昂贵,但对于低多边形模型的AABB计算具有正常的性能。
总而言之,AABB重计算优于昂贵的窄相算法。