1

编辑:交叉发布收到了我接受的一些答案,在https://gamedev.stackexchange.com/questions/100404/rigidbody-physics-concept-why-translate-collision-shape-on-the-fly-instead-of-m

我花了一些时间浏览 Java 中的物理引擎源代码,如 Box2D、Phys2D(均为 2D)和 JBullet(3D)。

我观察到,当刚体在每一步中移动并发生变化时,附加到它们的碰撞形状却没有。相反,它们始终位于坐标原点附近。当检查两个刚体的碰撞时,会从每个刚体中获取一个“平移”对象,并用于将两个检查的形状的顶点(或其他定义属性,取决于形状类型)即时转换为它们的附件的世界位置。然后使用这些信息来检测碰撞并对它们做出反应。

我已经得出结论,主要目的是,您可以为多个实体重用相同的形状实例,因为它们在所描述的场景中是无状态的,并且在每个步骤中即时计算所需信息时节省一些内存。

但是,我目前看到将形状的位置属性更改为成员值的更多优势。每个形状的 aabb 和顶点在每一步中都会改变一次,因此当一个形状与多个其他形状相交时,您不需要多次计算相同的顶点。另外,您还可以更改形状的区域属性(损坏变形),因为它仅由一个主体使用。

所以问题是:

为什么使用位置不可变的碰撞形状而不是可变的碰撞形状很常见?

4

0 回答 0