2

私は 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 の回転では目的の結果が得られません。

誰かが私が間違っていることを見つけてくれたらとても感謝していますか、それとも別の方法でやるべきですか?

ありがとう

4

1 に答える 1

2

これを行う:

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

どこでxradians = oldObject.rotation.x、など...

また、変更していない限り、 のデフォルト値object.matrixAutoUpdateはであるため、を直接true設定する必要はありません。object.matrix-- 回転を設定するだけです。このrender()呼び出しにより、マトリックスが更新されます。

于 2012-08-07T00:06:37.987 に答える