Threejs - 基于四元数旋转翻译对象

时间:2012-11-08 01:23:33

标签: javascript 3d webgl three.js

我有一个使用四元数的对象。此四元数在用户的按键上更新,以允许对象旋转其内部轴。轮换工作太棒了。当处于默认状态时(在用户调整旋转之前),我的四元数读取w:1,x:0,y:0,z:0

我希望这个对象总是通过它的内部z轴向前移动 - THREE.Vector3(0,0,-1)。如何使用quat知道z轴的位置并将其向前移动?

例如 - 当我的四元数读取w:0.7,x:0.7,y:0,z:0时 - 旋转对象使其z轴指向上方。有没有办法通过它的内轴移动一个物体?

这是一个jsfiddle示例:http://bitly.com/RXPy5w - 我希望方块始终相对于它的z轴向前移动

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

此处的四元数表示三维空间中的旋转。您需要先指定要旋转的初始方向。将其作为起始方向的单位向量。

现在,要沿当前方向移动,可以通过当前四元数描述的旋转旋转初始方向矢量。现在你有一个指向正确方向的单位矢量。

最后,当然,您可以缩放单位矢量,以非单位距离表示运动,将其添加到当前位置,然后就完成了。

答案 1 :(得分:2)

您所要做的就是在渲染循环中添加以下行:

airplane.translateZ( 1 );

更新小提琴:http://jsfiddle.net/Lc8gH/21/享受!

顺便说一下,你不能“翻译四元数”。继续学习直到你理解这段代码的作用。