使用AABB或OBB怀疑的碰撞检测

gme*_*rio 5 collision-detection bounding-box aabb

我想了解一下我想用它做一些实现.但我有些疑惑.de AABB的问题是对象必须是轴对齐的,否则你必须每帧重新计算bbox,是吗?重新计算是否昂贵?那么精度怎么样,你能把碰撞树细分为bbox吗?它如何与AABB一起使用?

OBB面向物体旋转,对吧?你必须在游戏之前建立树.我更难以实现并且有点昂贵,但我在精度方面获得了很多.但是,如果对象在游戏中旋转,bbox会自动重新计算其旋转吗?

哪一个最常用于游戏?为什么?

先感谢您 :)

Ben*_*enC 5

AABB、OBB、球体、胶囊...之间的选择取决于您正在运行的模拟类型以及您的约束(通常是实时应用程序)。

您需要评估利弊并做出相应的选择。例如,使用 AABB 进行测试非常快,但当对象旋转时需要重新计算 AABB。但是,如果您正在处理非常复杂的对象并处理BVH,则更新 AABB 树非常快,因为您只需要重新计算(“从头开始”)底部 AABB,而较高的 AABB 是从子 AABB 构造的。使用 OBB 时,测试成本更高,但如果您处理的是刚性对象,则无需重新计算 OBB。

如果您决定使用可变形对象,那么 AABB 树(或球体树)绝对是一个更好的主意,因为无论如何您的树都需要更新。

问题是:更新 AABB 树或 OBB 重叠测试产生的开销哪个更昂贵?所有这些都取决于您的模拟:对象复杂性、每秒平均 CD 测试等...您可以找到基于具有不同形状的不同方法(BVH、网格...)的不同 CD 库的一些基准,并针对特定问题进行测试。是一个您可能会感兴趣的示例。

关于实现,由于所有这些都已在多年前进行了研究并在许多图书馆中实现,因此您应该不会遇到任何麻烦。您可以看一下Christer Ericson 的《实时碰撞检测》,所有这些问题都得到了非常清楚的回答和解释。

您还可以使用不同形状之间的混合,例如一种用于宽相,另一种用于窄相(一旦到达叶子),但您可能不需要这样的东西。


Dmi*_*kov 3

AFAIK,大多数物理引擎使用 AABB + 扫描和修剪算法来进行碰撞检测的广泛阶段。树对于动态对象之间的碰撞检测几乎没有用处。然而,这些树可以成功地用于静态几何体

de AABB 的问题是对象必须轴对齐,否则你必须每帧重新计算 bbox,对吗?

是的,每次身体方向改变时都必须重新计算 AABB。但对于盒子、胶囊、圆锥体、圆柱体来说,这是一种非常便宜的操作。对于多边形模型肯定更昂贵,但是低多边形模型的 AABB 计算具有正常的性能。

总而言之,AABB 重新计算优于昂贵的窄相位算法。