我正在使用 Three.js,我希望能够从场景中获取一个对象,然后用一个新对象替换它,但旋转方向与我删除的对象相同。
我记下要删除的对象的旋转,然后使用此函数设置新对象的旋转:
rotateToWorldAxis = function(object, xradians, yradians, zradians) {
axisX = new THREE.Vector3(0, 1, 0);
axisY = new THREE.Vector3(1, 0, 0);
axisZ = new THREE.Vector3(0, 0, 1);
rotationMatrix = new THREE.Matrix4();
rotationMatrix.setRotationAxis(axisX.normalize(), xradians)
object.matrix = rotationMatrix;
object.rotation.setRotationFromMatrix(object.matrix);
rotationMatrix = new THREE.Matrix4();
rotationMatrix.setRotationAxis(axisY.normalize(), yradians);
rotationMatrix.multiplySelf(object.matrix);
object.matrix = rotationMatrix;
object.rotation.setRotationFromMatrix(object.matrix);
rotationMatrix = new THREE.Matrix4();
rotationMatrix.setRotationAxis(axisZ.normalize(), zradians);
rotationMatrix.multiplySelf(object.matrix);
object.matrix = rotationMatrix;
object.rotation.setRotationFromMatrix(object.matrix);
}
x 和 y 旋转工作得很好,但 z 旋转没有给出所需的结果。
如果有人能发现我做错了什么,或者我应该采取另一种方式,我将不胜感激?
谢谢
最佳答案
这样做:
object.rotation.set( xradians, yradians, zradians );
其中xradians = oldObject.rotation.x
等...
此外,除非您进行了更改,否则 object.matrixAutoUpdate
的默认值为 true
,因此您无需设置 object.matrix
直接。 -- 只需设置旋转即可。 render()
调用将为您更新矩阵。
关于javascript - 在 Three.js 中恢复旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11835626/