Unityのtransformをthree.jsのpositionに変えたいときー
変えたいときー
そういう時もまれにある。
Unityは、左手座標系、three.jsは右手座標系。
z軸の向きが違うので、positionについてはz軸にマイナス1でもかけておく。
rotationについては、座標系とその回転軸の方向を合わせてやらないと、座標変換しても変なことになる。
変換関数はこちらのを参考にしたが、
stackoverflow.com
function toThreeRotation (qx, qy, qz, qw) { var q = new THREE.Quaternion(-qz, qw, -qx, qy); var v = new THREE.Euler(); v.setFromQuaternion( q ); v.y += Math.PI; v.z *= -1; return v; }
Quaternionの初期化の際にいくつか符号を加えたり順序を変えたりした。
これらの符号や順序操作は用途と座標系に応じて変えていかなければならない、らしいっすよ。
Unityアプリとブラウザアプリ間で物体の位置などを同期させたいなどといった
謎ケースに対応した際のメモでした。