Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获得围绕世界轴3的旋转_Javascript_Three.js - Fatal编程技术网

Javascript 如何获得围绕世界轴3的旋转

Javascript 如何获得围绕世界轴3的旋转,javascript,three.js,Javascript,Three.js,我想从Object3D中根据世界坐标轴获得旋转值,例如 roation.x, rotation.y, rotation.z 现在我打电话的时候 object.rotation.x 我根据对象的局部轴获得旋转值 谢谢。要在世界轴上旋转对象,可以使用下面的功能 var rtWorldMatrix; function rotateAroundWorldAxis(object, axis, radians) { rtWorldMatrix= new THREE.Matrix4();

我想从Object3D中根据世界坐标轴获得旋转值,例如

roation.x, rotation.y, rotation.z
现在我打电话的时候

object.rotation.x 
我根据对象的局部轴获得旋转值


谢谢。

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

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);
}
打电话
rotateAroundWorldAxisobjectToRotate,新三个。矢量31,0,0,90*Math.PI/180

对不起,这条线坏了

我也有同样的问题,直到我读了一些才找到解决办法。事情突然变得明朗起来

Three.js使用固有的Tait Bryan排序,也称为偏航、俯仰和滚动。这意味着相对于局部坐标系执行旋转。也就是说,对于“XYZ”顺序,旋转首先围绕世界X,然后围绕局部Y,现在可能不同于世界Y轴,然后围绕局部Z,可能不同于世界Z轴

一些实现可能使用外部正确顺序,在这种情况下,相对于世界坐标系执行旋转,因此对于顺序“XYZ”,旋转围绕world-X、world-Y和world-Z

这两种类型之间的转换相对简单,只需颠倒顺序和旋转,这样,角度a、b、c关于XYZ的固有three.js Euler旋转将等效于角度c、b、a关于ZYX的外在Euler旋转

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

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

我问的是如何获取值,而不是如何旋转。无论如何,谢谢。我用四元数值来处理这个问题。@omarmaris如果你解决了这个问题,你能发布你的答案吗?