应用脉冲和应用力累积力,它们不会取代它们



我使用three.jsenable3d(ammo.js)

我在图形和物理方面没有什么经验,但我花了几个小时试图理解...body.appyImpulse()是如何工作的,我想我已经弄清楚了每次调用这个方法时,它都会积累力。

因此,例如,如果我运行以下命令:

sphere.body.applyImpulse({ x: 2, y: 0, z: 0 }, { x: 0.01, y: 0.01, z: 0 });

球体开始向前移动和旋转,因为在球体的特定点P1处施加了一个力a。

如果我再次调用这个方法,球体将获得更大的速度和旋转,因为施加了第二个力B并求和为a。

问题是是否有一种方法,而不是增加越来越多的力,改变第一个已经施加的力。

因此,例如,力A(由第一次调用applyImpulse触发)的强度增加或减少取决于附着在球体上的点P1(带正电)和球体外的第二个点p2(带负电)之间的距离。

我们是否可以控制/访问施加在球体上的多重力?

更新:我想我已经找到了一个解决问题的方法,即在计算和应用所有脉冲之前,在每次更新中设置angularVelocity和velocity为0 ({x: 0, y: 0, z: 0})。

问题仍然是是否也有可能通过applyImpulse管理施加的各种力。

谢谢。

所以经过几天的测试和玩弄applyImpulse,我想我可以回答自己:这是真的,applyImpulse累积每次调用,但对于一个力持续一段时间,你可以设置angularVelocity和velocity为0之前使用appluImpulse和事情工作得很好。

update(delta: number): void {
this.body.setVelocity(0, 0, 0);
this.body.setAngularVelocity(0, 0, 0);
this.applyImpulses();
this.applyFriction();
this.applyAngularFriction();
}

相关内容

最新更新