XNAで単純なARプログラムを作成しましたが、私は現在2つのマーカー間の相対的な変換を探しています。2つの位置の間の相対的な変換を見つけようとしています - XNA
私は自分のカメラに関連してマーカーを配置し、マーカーの翻訳と回転行列を抽出しました。
私がしようとしているのは、マーカー1からマーカー2に到達する相対的な翻訳を見つけることです。たとえば、マーカー1とマーカー2が同じZ平面上にある場合、Z並び成分は0mmになります。
以下のアプリケーションが同一平面上に2つの位置のために働いている画像:私は単に第1マーカーの逆数により第2マーカーの行列を乗算してIを得ることができると仮定
翻訳。しかし、私は完全に間違った結果を得ています。
次のように私が実行しているコードは:
posit.EstimatePose(点、マトリックスアウト、トランスアウト)。
float yaw, pitch, roll;
matrix.ExtractYawPitchRoll(out yaw, out pitch, out roll);
Matrix rotation =
Matrix.CreateFromYawPitchRoll(-yaw, -pitch, roll);
Matrix translation =
Matrix.CreateTranslation(new Vector3(trans.X, trans.Y, -trans.Z));
Matrix complete = rotation * translation;
List<Matrix> all = new List<Matrix>();
all.Add(rotation);
all.Add(translation);
all.Add(complete);
matrixes.Add(all);
}
Matrix res = Matrix.Invert(matrixes[0][2]) * matrixes[1][2];
Vector3 scaleR;
Vector3 translationR;
Quaternion rotationR;
res.Decompose(out scaleR, out rotationR, out translationR);
結果:
TranslationR:{X:-103.4285 Y:-104.1754 Z:104.9243} XNAを使用して上記のように、私が想定よう
Iは、3Dを重ねた画像上軸カメラとの相対的な回転と平行移動が正しく行われました。
私は翻訳を計算する途中で何か間違っているようです。私は間違いなくZが104mmになるとは思わないでしょう。
{X:0、Y:150 Z:0}