【发布时间】:2012-08-06 20:41:15
【问题描述】:
我正在使用 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,等等? -
非常感谢您的回复 - 我采纳了您的建议并将函数更改为:rotateToWorldAxis = function(object, xradians, yradians, zradians) { object.rotation.set(xradians, yradians, zradians) ; object.matrix.setRotationFromEuler(object.rotation);现在它工作得很好 - 再次感谢!
-
您不需要
setRotationFromEuler()部分。请参阅下面的答案。
标签: javascript three.js