現時点では、AR 用のマーカー検出システムがあります。シーン内のマーカーを検出し、シーン内の各マーカーのカメラの変換マトリックスを提供します。
2 つのマーカーを見つけたとします。他のマーカーの向きと一致させるために、マーカーの1つに適用する必要がある回転行列を見つけようとしています。
あるマーカーから別のマーカーへの変換行列を計算し、変換を分解してx、y、zオイラー回転行列を取得するのと同じはずだと考えましたが、これを機能させることができないようです。XNAでC#を使用しています。
コード内:
Matrix marker1 = markerTransforms[0];
Matrix marker2 = markerTransforms[1];
Matrix relativeTransform = Matrix.Invert(marker1) * marker2;
Quaternion rotation;
Vector3 scale;
Vector3 translation;
relativeTransform.Decompose(out scale, out rotation, out translation);
Matrix rotationMatrix = Matrix.CreateFromQuaternion(rotation);
上記はうまくいかないようです。
別の質問は、回転行列から x、y、z オイラー回転を抽出する方法ですか?
編集:
ここで x、y、z の順序に従って四元数をオイラーに変換する関数を見つけました: http://forums.create.msdn.com/forums/p/4574/23763.aspx
これを私のコードに適用すると、次の結果が得られました。
実際の回転は次のようになります: x:0 y:0 z:-0.52
また、カメラの位置によって y と z が大きく変化することにも気付きました。
ここで説明されているように、マーカー検出器から取得した 2 つの変換行列には、マーカーの 1 つに対するカメラの方向と移動が含まれてい ます。それらを XNA 形式に変換し、コーナーを画面に描画でき、カメラが見ているものと一致するため、それらが正しく機能することを知っています。