我正在尝试制作一个简单的飞机飞行游戏。我希望用户使用箭头键围绕 360 度区域旋转平面,其中上下是相对于飞机水平位置的 Y 轴。左右箭头应该只是围绕它的 z 轴旋转平面,并允许它有一个新的 Y 轴位置。我的问题是 - 如何在相对于新水平位置的 Y 轴上旋转飞机?

我有一个叫做飞机的组,已经完成了像飞机.rotation.z(左和右)和airplane.rotation.x(上和下)这样的东西——但x轴不沿着新的水平面。我还尝试使用airplane.children[1].matrix.rotation.x 访问组内的模型/网格,看看这是否可以改变相对Y 轴……然而,这会导致同样的问题。如何找到与其当前水平位置的相对 Y 轴?

我的代码可以在 jsfiddle here 上看到

任何帮助将不胜感激。

最佳答案

坦率地说,我很难理解您的问题,但我认为您的问题是:“如何使用箭头键围绕对象的内部 z 轴或 x 轴旋转对象?”

像这样的例程将做到这一点:

var _q1 = new THREE.Quaternion();

function rotateOnAxis( object, axis, angle ) {

    _q1.setFromAxisAngle( axis, angle );
    object.quaternion.multiplySelf( _q1 );

}

该例程使用四元数来实现。这真的没什么大不了的——你只需要设置:
object.useQuaternion = true;

这是一个更新的 fiddle : http://jsfiddle.net/Lc8gH/20/

编辑:您现在可以使用 Object3D.rotateOnAxis( axis, angle );
三.js r.58

关于javascript - Three.js 飞机的 3D 旋转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13210873/

10-12 12:21