2

我有一个移动的 3D 对象,我需要能够对其施加力,例如重力。在 2D 中,我只需将其运动存储在 dx 和 dy 中,但由于这是 3D 中的,所以我使用 aVector3D direction和 a float speed。当使用类似的东西时,如何确定旋转方向和改变速度的程度applyForce(Vector3D force)

4

1 回答 1

1

牛顿第二定律给出了加速度与施加的力成正比。因此,一个非常简单的方法是前向集成,例如(用于紧凑性的伪代码)

class Object {
   Vector3D position;
   Vector3D velocity;
   float mass;

   updatePhysics(Vector3D force, float dt) {
      velocity += (1.0/mass) * force * dt;
      position += velocity * dt;
   }
}

当然,在现实生活中存在诸如数值不稳定性和时间增量的选择等问题。如果您尝试执行一些一次性计算或者这是针对 3D 游戏,我无法从您的问题中理解。如果是后者,我建议您查看诸如 Bullet Physics 之类的物理库,您将免费获得很多。

于 2012-10-20T15:08:51.197 回答