我使用three.js
和enable3d
(ammo.js
)
我对图形和物理没有什么经验,但我花了几个小时试图了解...body.appyImpulse()
是如何工作的,我想我已经弄明白了,每次这种方法被称为它时,它就会积累力量。
因此,例如,如果我运行以下代码:
sphere.body.applyImpulse({ x: 2, y: 0, z: 0 }, { x: 0.01, y: 0.01, z: 0 });
球体开始向前移动和旋转,因为一个力A被施加到球体的一个特定点P1上。
如果我再次调用这个方法,球体将获得更大的速度和旋转,因为施加了第二种力B,并将其求和为A。
问题是,是否有一种方法,而不是增加越来越多的力量,改变第一个已经应用的方法。
因此,例如,力A(由第一次调用applyImpulse
触发)增加或减少强度取决于附加在球体上的P1点(带正电)和球体外的第二点p2 (带负电)之间的距离。
我们对施加在球体上的多重力有任何控制或访问吗?
更新:我想我找到了一个解决问题的方法,就是在每次更新之前,在计算和应用所有脉冲之前,将angularVelocity和速度设置为0 ({x: 0, y: 0, z: 0}
)。
问题仍然是是否也有可能管理通过applyImpulse
应用的各种力量。
谢谢。
发布于 2022-06-24 09:26:03
因此,经过几天的测试和使用applyImpulse,我想我可以回答自己:的确,每次调用applyImpulse都会积累,但是,对于一个持续时间很长的力,在使用appluImpulse之前,可以将angularVelocity和速度设置为0,一切都很好。
update(delta: number): void {
this.body.setVelocity(0, 0, 0);
this.body.setAngularVelocity(0, 0, 0);
this.applyImpulses();
this.applyFriction();
this.applyAngularFriction();
}
https://stackoverflow.com/questions/72719561
复制