Javascript Three.js:重新定向旋转轴

Javascript Three.js:重新定向旋转轴,javascript,rotation,three.js,Javascript,Rotation,Three.js,我有一个飞机网格,它的尾巴在(0,0,0),机头在(a,b,c)。我想把鼻子指向(e,f,g),把尾巴留在(0,0,0)。不应该引入任何无关的旋转,只需要一个简单的旋转来重新定位平面 也许还有另一种说法:在计算平面旋转时,我希望使用不同的坐标系。在我的例子中(e,f,g)理想情况下是(1,0,0),所以我可以更简单地计算一些旋转 这可能更像是一个纯粹的数学问题,但我试图在three.js中实现这一点,并想知道实现这一结果的最佳调用系列。首先,创建所需的四元数: var vFrom = new T

我有一个飞机网格,它的尾巴在(0,0,0),机头在(a,b,c)。我想把鼻子指向(e,f,g),把尾巴留在(0,0,0)。不应该引入任何无关的旋转,只需要一个简单的旋转来重新定位平面

也许还有另一种说法:在计算平面旋转时,我希望使用不同的坐标系。在我的例子中(e,f,g)理想情况下是(1,0,0),所以我可以更简单地计算一些旋转


这可能更像是一个纯粹的数学问题,但我试图在three.js中实现这一点,并想知道实现这一结果的最佳调用系列。

首先,创建所需的四元数:

var vFrom = new THREE.Vector3( a, b, c ).normalize();
var vTo = new THREE.Vector3( e, f, g ).normalize();

var quaternion = new THREE.Quaternion().setFromUnitVectors( vFrom, vTo );
如果几何体的方向使飞机朝向正z轴,您会发现这很方便

因此,将
(e,f,g)
定义为
(0,0,1)

现在,将四元数应用于网格的几何体:

geometry.applyMatrix( new THREE.Matrix4().makeRotationFromQuaternion( quaternion ) );
此时,飞机的机头应指向向量vTo的方向,在您的情况下,该方向为正z轴。(希望飞机此时是水平的。如果不是,则必须应用另一个变换来修复。)

要使用自然偏航、俯仰和横滚来重新定向飞机,请设置

mesh.rotation.order = 'YXZ'. // the default is `XYZ`
现在,可以按如下方式设置飞机的方向:

mesh.rotation.set( pitch_radians, yaw_radians, roll_radians );
一切都应该非常直观


three.js r.69

我可以在网格(object3d)上调用applyMatrix(),而不是在几何体上,对吗?这正是我所期望的,现在我挠头想看看它们的区别。通过首先对几何体应用变换,几何体的方向符合要求,并且
网格。旋转保持在
(0,0,0)