Javascript ThreeJS对象四元数旋转不跟随轴

Javascript ThreeJS对象四元数旋转不跟随轴,javascript,three.js,Javascript,Three.js,我试图让一个3D对象沿着3D路径移动,这样它就始终面向它移动的方向。我试图通过以下方式实现这一点: fishObject.quaternion.setFromAxisAngle(轴,弧度) 其中,弧度是向上矢量与行驶方向之间的角度 在下面的画笔中,为了清晰起见,对轴进行了描述。蓝线是轴,紫色线正好是向上,移动的红线是鱼应该面对的方向(切线)。它们都以正确的方式移动,但当我设置四元数时,对象的旋转似乎并不跟随其轴 笔中有一点杂乱(用于构建鱼),但我所看到的是第281行及其参数: fishObjec

我试图让一个3D对象沿着3D路径移动,这样它就始终面向它移动的方向。我试图通过以下方式实现这一点:

fishObject.quaternion.setFromAxisAngle(轴,弧度)

其中,
弧度
向上
矢量与行驶方向之间的角度

在下面的画笔中,为了清晰起见,对轴进行了描述。蓝线是
,紫色线正好是
向上
,移动的红线是鱼应该面对的方向(
切线
)。它们都以正确的方式移动,但当我设置四元数时,对象的旋转似乎并不跟随其轴

笔中有一点杂乱(用于构建鱼),但我所看到的是第281行及其参数:
fishObject.quaternion.setFromAxisAngle(轴,弧度)

我对这件事还不熟悉。对于熟悉3D旋转的人来说应该很简单


谢谢,如果我能说得更清楚,请告诉我。

获得性能良好的切线框架的一种方法是使用
lookAt()
方法

var axes = new THREE.AxesHelper( 10 );
scene.add( axes );

. . .

// then, in the render loop

pt = swimPath.spline.getPoint( t );

tangent = swimPath.spline.getTangent( t );

axes.position.copy( pt );
axes.lookAt( pt.add( tangent ) );
现在,确保您的“鱼”的方向,使其在默认情况下面向局部正z轴。在您的情况下,情况并非如此,因此您必须应用旋转。将对象添加为相切帧的子对象

fishObject.rotation.set( 0, - Math.PI / 2, 0 );
axes.add( fishObject );

three.js r.92

也许这会有所帮助:@WestLangley谢谢,但还是没有运气。问题在于,当轴改变方向时,鱼的Z旋转不会调整。这里的代码很好地管理了鱼在轴上的旋转,但是鱼的方向与轴的方向没有关联。鱼从全局Z轴的旋转始终是相同的,因此鱼始终面向右侧。您试图在一个程序中执行太多操作,但对基本原理没有清楚的了解。