我正在使用Three.js,我希望能夠從場景中取出一個對象,然後用一個新對象替換它,但與我移除的對象相同。在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'等等? – WestLangley 2012-08-06 21:15:54
非常感謝您的回覆 - 我採納了您的建議並將其功能更改爲: rotateToWorldAxis = function(object,xradians,yradians,zradians)object.rotation.set(xradians,yradians,zradians); object.matrix.setRotationFromEuler(object.rotation); } 現在它工作得很好 - 再次感謝! – talktoughuk 2012-08-06 22:43:09
你不需要'setRotationFromEuler()'部分。見下面的答案。 – WestLangley 2012-08-07 00:06:00