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