如何绕世界轴旋转三个js

时间:2014-09-18 05:19:14

标签: javascript three.js

我想根据世界轴(例如

)从Object3D获取旋转值
roation.x, rotation.y, rotation.z

目前我致电

object.rotation.x 

我根据对象的本地轴获得旋转值。

感谢。

2 个答案:

答案 0 :(得分:2)

对不起线程necro。

我有同样的问题,在我读了一些ThreeJS doc about Euler angles之前找不到解决方案。它突然变得清晰。

  

Three.js使用内在(Tait-Bryan)排序,也称为偏航,俯仰和滚转。这意味着相对于局部坐标系执行旋转。也就是说,对于顺序' XYZ',旋转首先围绕world-X,然后围绕local-Y(现在可能与世界Y轴不同),然后是local-Z(可能是与世界Z轴不同。

     

某些实现可能使用外在(正确)排序,在这种情况下,相对于世界坐标系执行旋转,因此对于顺序' XYZ',旋转在世界-X周围,世界 - Y,和世界-Z。

     

两种类型之间的转换相对简单,你只需要颠倒顺序和旋转,这样一个关于XYZ的角度a,b,c的内在(three.js)欧拉旋转将相当于一个外在的角度c,b,a的欧拉旋转约为ZYX。

如果您需要按XYZ顺序进行世界旋转,我想您可以执行以下操作:

var worldRot = new THREE.Euler();
obj.getWorldRotation().copy(worldRot);
worldRot.reorder("ZYX");
// use worldRot.x, worldRot.y, worldRot.z

答案 1 :(得分:0)

要在世界轴上旋转对象,可以使用以下功能

var rtWorldMatrix;
function rotateAroundWorldAxis(object, axis, radians)
{
    rtWorldMatrix= new THREE.Matrix4();
    rtWorldMatrix.makeRotationAxis(axis.normalize(), radians);
    rtWorldMatrix.multiplySelf(object.matrix);
    object.matrix = rtWorldMatrix;
    object.rotation.getRotationFromMatrix(object.matrix, object.scale);
}

然后打电话      rotateAroundWorldAxis(objectToRotate,new THREE.Vector3(1,0,0),90 * Math.PI / 180);