刚体物理概念:为什么要即时翻译碰撞形状而不是改变它?

时间:2015-05-01 19:15:57

标签: collision-detection physics-engine rigid-bodies

编辑:我在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和顶点将在每个步骤中改变一次,因此当将一个形状与多个其他形状相交时,您不需要多次计算相同的顶点。 另外,您还可以更改形状的区域属性(损坏变形),因为它仅由一个主体使用。

所以问题是:

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

0 个答案:

没有答案