Three.js 3D飞机旋转

3
我正在制作一个简单的飞行游戏。我希望用户使用箭头键,在一个360度的区域内将飞机围绕一个相对于飞机水平位置的Y轴旋转,其中上下为相对Y轴。左右箭头应该只是让飞机围绕其Z轴旋转,并允许其具有新的Y轴位置。我的问题是,如何将飞机旋转到相对于新的水平位置的Y轴?
我有一个名为"airplane"的组,并进行了一些处理,例如airplane.rotation.z(用于左右)和airplane.rotation.x(用于上下),但是x轴不沿新的水平面。我也尝试通过访问组内部的模型/网格,使用airplane.children[1].matrix.rotation.x来查看是否可以更改相对Y轴......然而,这会导致相同的问题。我怎么找到它相对于当前水平位置的Y轴?
我的代码可以在此处jsfiddle中查看。
非常感谢您的帮助。

Ctrl-F ?: 没有匹配项。目前,你的问题几乎是一堵长篇文字墙,考虑重新组织和格式化它,让问题更加清晰明确。 - phant0m
2
@phant0m - 刚刚简化了问题。如果之前不够清晰,抱歉。 - Robbie
你能在jsfiddle.net上设置一些内容来展示你的问题吗? - Neil
@Neil - 当然:http://jsfiddle.net/Lc8gH/18/ 非常感谢您的查看。 - Robbie
1个回答

4

坦白地说,我很难理解您的问题,但我认为您的问题是:“如何使用箭头键围绕对象的内部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 );

three.js r.58


这正是我一直在寻找的。很抱歉我的语言表达有些混乱...非常感谢您的帮助! - Robbie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接