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

时间:2018-05-10 03:54:24

标签: javascript three.js

我正在尝试让3D对象跟随3D路径,使其始终面向行进的方向。我尝试这样做:

fishObject.quaternion.setFromAxisAngle(axis, radians)

其中radiansup向量与行进方向之间的角度

在下面的笔中,为了清楚起见,描绘了轴。蓝线是axis,紫色线只是up,移动的红线是鱼应该面对的方向(tangent)。它们都以正确的方式移动,但是当我设置四元数时,对象的旋转似乎不跟随其轴

笔中有一点杂乱(建造鱼),但我所看到的只是第281行及其论点: fishObject.quaternion.setFromAxisAngle(axis, radians)

我刚认识这个。熟悉3D旋转的人应该很简单。

https://codepen.io/nth-chile/pen/ELQqqb

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

1 个答案:

答案 0 :(得分:0)

获得表现良好的切线框架的一种方法是使用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