我想根据世界轴(例如
)从Object3D获取旋转值roation.x, rotation.y, rotation.z
目前我致电
object.rotation.x
我根据对象的本地轴获得旋转值。
感谢。
答案 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);