使用轴角法

时间:2015-05-26 04:15:50

标签: three.js

我正在尝试编写一个控件,允许用户旋转对象,使用左/右箭头围绕X轴旋转,上/下箭头围绕Y轴旋转。 (据我所知,一旦开始旋转,物体内部坐标系将与世界坐标系不匹配。)

我可以围绕Y轴旋转对象,如下所示:

    var axis = new THREE.Vector3(0,1,0);
    aMatrix.makeRotationAxis( axis.normalize(), incr );
    obj.rotation.setFromRotationMatrix( aMatrix );

其中incr是要旋转的数量。

我可以按如下方式围绕X轴旋转对象:

    var axis = new THREE.Vector3(1,0,0);
    aMatrix.makeRotationAxis( axis.normalize(), incr );
    obj.rotation.setFromRotationMatrix( aMatrix );

两者都很好。但是,当我从一个转到另一个(旋转X,然后旋转Y)时,另一个轴会快速回到零位置。因此,如果我绕X转45度,然后开始围绕Y旋转,我的X旋转会回到零。

我正在设置:

        obj.useQuaternion = true;

在所有情况下。

我做错了什么?

R69

1 个答案:

答案 0 :(得分:0)

使用Matrix.makeRotationAxis创建的旋转矩阵仅存储围绕该轴的旋转。要围绕两个轴旋转,您需要创建两个矩阵(每个轴一个)并将它们相乘。

这样:

matrixXY = new THREE.Matrix4();

matrixX.makeRotationAxis(axisX, angleX);
matrixY.makeRotationAxis(axisY, angleY);
matrixXY.multiplyMatrices(matrixX, matrixY);

obj.rotation.setFromRotationMatrix(matrixXY);

使用旋转时有很多选项,因此您的用例可能更简单。