Three.jsからUnity3DへのThree.jsシーンエクスポータを作成しています。私の問題はオイラー角をThree.jsからUnityに変換することです。オブジェクト回転をThree.jsからUnity3Dに変換
私がことを知っている:
- Three.jsは、右利きのスペースであるとUnity3Dが左利きです。
- Unity3Dでは、平面は床上にフラットに構成され、Three.jsでは正のzを向いて立っています。
どうすればいいですか?
UPDATE
私がアドバイスを@StefanDragnev従うことを試みたが、私はそれがwork.This作ることができないUnityのためのマトリックスを取得するために私のThree.JSコードです:
var originalMatrix = object3D.matrix.clone();
var mirrorMatrix = new THREE.Matrix4().makeScale(1, 1, -1);
var leftHandMatrix = new THREE.Matrix4();
leftHandMatrix.multiplyMatrices(originalMatrix,mirrorMatrix);
var rotationMatrix = new THREE.Matrix4().makeRotationX(Math.PI/2);
var unityMatrix = new THREE.Matrix4();
unityMatrix.multiplyMatrices(leftHandMatrix,rotationMatrix);
jsonForUnity.object.worldMatrix = unityMatrix.toArray();
私はmirrorMatrixを試してみました(-1,1,1)、またはmakeRotationX(Math.PI/2)でも動作しませんでした。ユニティはオブジェクトのワールドマトリックスからオブジェクト変換を直接設定することはできません。行列から四元数を抽出しなければならなかった。これは私のユニティコードです
Vector4 row0 = new Vector4 (threeObject.matrix[0],threeObject.matrix[4],threeObject.matrix[8],threeObject.matrix[12]);
Vector4 row1 = new Vector4 (threeObject.matrix[1],threeObject.matrix[5],threeObject.matrix[9],threeObject.matrix[13]);
Vector4 row2 = new Vector4 (threeObject.matrix[2],threeObject.matrix[6],threeObject.matrix[10],threeObject.matrix[14]);
Vector4 row3 = new Vector4 (threeObject.matrix[3],threeObject.matrix[7],threeObject.matrix[11],threeObject.matrix[15]);
Matrix4x4 matrix = new Matrix4x4();
matrix.SetRow (0,row0);
matrix.SetRow (1,row1);
matrix.SetRow (2,row2);
matrix.SetRow (3,row3);
Quaternion qr = Quaternion.LookRotation(matrix.GetColumn(2), matrix.GetColumn(1));
gameObject.transform.localRotation = qr;
私はどこで失敗しましたか?