如何同时沿三个轴(x,y,z)旋转球体

时间:2017-06-28 08:30:04

标签: javascript three.js quaternions euler-angles

我希望沿着所有三个轴旋转图像,以便以适当的顺序考虑所有旋转。
使用Three Js库并且旋转似乎沿着一个轴工作,而三个轴的旋转是异常的。我已经看到了一些关于使用四元数来旋转以避免万向节锁定的想法,我尝试了Euler,但它没有成功。

sphericImageMes​​h _ 是我的球体, this.getRollDeg() 是获取相机给出的滚动的方法

我尝试的是以下内容:

// var euler = new THREE.Euler( - THREE.Math.degToRad(this.getRollDeg()), - THREE.Math.degToRad( this.getHeadingDeg()) , - THREE.Math.degToRad(this.getPitchDeg()), 'XYZ' );
// this.sphericImageMesh_.setRotationFromEuler(euler);

// this.sphericImageMesh_.rotateZ(THREE.Math.degToRad(-this.getPitchDeg()));
// this.sphericImageMesh_.rotateX(THREE.Math.degToRad(-this.getRollDeg()));
this.sphericImageMesh_.rotateY(THREE.Math.degToRad(-this.getHeadingDeg()));

我见过使用 Quaternions MatrixX4 不知道如何应用它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以尝试重新排序轮换。我认为它默认为XYZ,但我发现YXZ或YZX更直观。使用n.rotation.order(' YXZ');并且看它是否表现得更接近你的想法。如果你正在做一个+ Z向前的flightim,这将更直观地工作。你偏航,然后投球,然后滚动。

https://threejs.org/docs/index.html#api/math/Euler