2016-04-18 80 views
2

我想要在cannonJS身体上实现一个类似于移动的太空飞船。 (我真的是一个初学者) 我发现了一些例子,但没有一个是我正在寻找的。根据它的四元数在3D中移动cannonJS对象

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

这里是我在这里所做的:http://codepen.io/Tomo0613/pen/xVjqqKenter code here 但我绝对有理解四元组的问题。

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

回答

2

身体上的速度总是在世界坐标上。对于这种情况,您可能想要跟踪变量中的局部速度(例如vec(0,0,+1)),然后将其转换为世界速度,并在每次旋转更改时将其应用于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); 
+0

其实我做了一种解决方案[http://codepen.io/Tomo0613/full/PzwgxV /]现在我看得更清楚了,但尽管如此,我仍然在努力学习数学。 非常感谢您的回答! –

+0

嗨,我不知道什么localVelocity是什么?你能解释一下吗? –

+1

@SébastienGarcia-Roméo如果一个球在速度为'0,0,1'的时候在以'1000,0,0'行驶的飞船上滚动,则球的真实速度为'1000,0,1' 。 'localVelocity'只是跟踪相对于太空飞船'0,0,1'的速度的一种方式,因为它更容易用于与宇宙飞船墙等的碰撞。在上面的例子中,它更像是宇宙飞船旋转,不移动,但它是一样的想法。 –