【问题标题】:Restoring Rotation In Three.js在 Three.js 中恢复旋转
【发布时间】: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


【解决方案1】:

这样做:

object.rotation.set( xradians, yradians, zradians );

xradians = oldObject.rotation.x 等...

另外,除非你改变了object.matrixAutoUpdate的默认值是true,所以你不需要直接设置object.matrix。 -- 只需设置旋转。 render() 调用将为您更新矩阵。

【讨论】:

  • 也可以简化为....oldRotation.copy( oldObject.rotation ); object.copy( oldRotation );
  • @mrdoob,你是说object.rotation.copy( oldObject.rotation );吗?那更好。不过,我不明白你的第二个表达方式......
  • 啊,是的。那就更好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多