根据四元数在3D中移动cannonJS对象

时间:2016-04-18 13:43:00

标签: three.js quaternions cannon.js

我想要在cannonJS身上移动太空船。 (我真的是初学者) 我找到了一些例子,但没有一个是我正在寻找的。

我知道移动物体的正确方法是改变它的速度。

以下是我在此处所做的事:http://codepen.io/Tomo0613/pen/xVjqqK enter code here 但是我对理解四元数肯定有问题。

有没有办法更新,当我旋转时,身体的矢量根据其四元数,或者总是与世界相关? 结果:当身体仅在Z轴上加速时,它总是朝着它面向的方向移动。

1 个答案:

答案 0 :(得分:2)

身体上的速度始终是世界坐标。对于这种情况,您可能希望跟踪变量中的局部速度(例如vec(0,0,+1)),然后将其转换为 world 速度,并在每次旋转更改时将其应用于Body

var localVelocity = new CANNON.Vec3(0, 0, 1);
var worldVelocity = body.quaternion.vmult(localVelocity);
body.velocity.copy(worldVelocity);

或者,相同代码的更快但更难阅读的版本:

var localVelocity = new CANNON.Vec3(0, 0, 1);
body.quaternion.vmult(localVelocity, body.velocity);