Javascript Three.js:重新定向旋转轴
我有一个飞机网格,它的尾巴在(0,0,0),机头在(a,b,c)。我想把鼻子指向(e,f,g),把尾巴留在(0,0,0)。不应该引入任何无关的旋转,只需要一个简单的旋转来重新定位平面 也许还有另一种说法:在计算平面旋转时,我希望使用不同的坐标系。在我的例子中(e,f,g)理想情况下是(1,0,0),所以我可以更简单地计算一些旋转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
这可能更像是一个纯粹的数学问题,但我试图在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)
。