私は入力された3Dベクトルと、カメラのピッチとヨーを持っています。必要な変換とマトリックスマッピングを理解して実装するのに役立つリソースへのリンクを誰かが記述したり提供したりできますか?ワールド座標をカメラ座標に変換するにはどうすればよいですか?
答えて
世界とカメラの変換行列は、カメラとワールドの行列の逆行列です。カメラからワールドへのマトリックスは、カメラの位置への平行移動とカメラの向きへの回転の組み合わせです。 Mは、カメラの向きとトンに対応する3x3の回転行列であればこのように、カメラの位置は、その後、4×4のカメラ・ツー・世界行列は次のようになります。私がいることを想定してきた
M00 M01 M02 tx M10 M11 M12 ty M20 M21 M22 tz 0 0 0 1
注意ベクトルは右側に乗算されて変換を実行する列ベクトルです。逆の規則を使用する場合は、必ず行列を転置してください。
Mを検索するには、ロール、ピッチ、ヨーなどの特定の規則に応じて、Wikipediaに記載されている式のいずれかを使用できます。これらの式では、ベクトルは左に乗算される行ベクトルであるという規則を使用しています。
カメラからワールドへの行列を計算して反転するのではなく、より効率的な(そして数値的に安定した)代わりの方法は、ワールド・ツー・カメラ行列を直接計算することです。これを行うには、(3つの座標すべてを無効にする)カメラの位置とその向きを反転させます(ロール、ピッチ、ヨー角を無効にし、それらを適切な範囲に調整する)。アルゴリズム。
あなたは何を記述しているかは「パースペクティブ投影法」と呼ばれ、マトリクスの数学を説明し、これを行うために必要なコードをウェブ上に提供しています。我々は4x4の行列記述するために、このような構造を持っている場合は、wikipedia page
で始めることができます:あなたが持っているすべてのオイラー角の場合
class Matrix4x4
{
public:
union
{
struct
{
Type Xx, Xy, Xz, Xw;
Type Yx, Yy, Yz, Yw;
Type Zx, Zy, Zz, Zw;
Type Wx, Wy, Wz, Ww;
};
struct
{
Vector3<Type> Right;
Type XW;
Vector3<Type> Up;
Type YW;
Vector3<Type> Look;
Type ZW;
Vector3<Type> Pos;
Type WW;
};
Type asDoubleArray[4][4];
Type asArray[16];
};
};
を、それはヨー、ピッチ、ロールを表す角度であります3D空間内の点の位置を指定すると、Right、Up、およびLookベクトルを計算できます。 Right、Up、LookはX、Y、Zのベクトルですが、これはカメラなので簡単に名前を付けることができます。ローテーションをカメラ行列に適用する最も簡単な方法は、一連の回転行列を作成し、各回転行列でカメラ行列を掛けることです。そのため
良いの参照はここにある:http://www.euclideanspace.com
あなたはすべての必要な回転を適用したら、あなたはワールド空間でのカメラの位置にベクトル順位を設定することができます。
最後に、カメラの変換を適用する前に、カメラの行列の逆行列を取る必要があります。これは、ポリゴンの描画を開始する前に、モデルビュー行列を掛けることになります。上記の行列クラスの場合、逆は、このように計算されます。
Matrix4x4<float> cameraMatrix, rollRotation, pitchRotation, yawRotation;
Vector4<float> cameraPosition;
cameraMatrix = cameraMatrix * rollRotation * pitchRotation * yawRotation;
Matrix4x4<float> invCameraMat;
invCameraMat = cameraMatrix.OrthoNormalInverse();
glMultMatrixf(invCameraMat.asArray);
・ホープ、この:
template <typename Type>
Matrix4x4<Type> Matrix4x4<Type>::OrthoNormalInverse(void)
{
Matrix4x4<Type> OrthInv;
OrthInv = Transpose();
OrthInv.Xw = 0;
OrthInv.Yw = 0;
OrthInv.Zw = 0;
OrthInv.Wx = -(Right*Pos);
OrthInv.Wy = -(Up*Pos);
OrthInv.Wz = -(Look*Pos);
return OrthInv;
}
だから最終的には、道のうち、すべての私たちの行列constuctionで、あなたはこのような何かをやっているだろう助けてください。
- 1. ピクセル座標をワールド座標に変換する方法は?
- 2. OpenCv2でピクセル座標をワールド座標に変換する
- 3. ローカル座標をワールド座標に変換する式
- 4. カメラの座標をピクセル座標に変換するopencv
- 5. OpenGLで2Dスクリーン座標を2Dマップ座標に変換するにはどうすればよいですか?
- 6. 正方形の座標を円の座標に変換するにはどうすればよいですか?
- 7. android opengl es 2.0画面座標をワールド座標に変換する
- 8. Netlogoワールド座標
- 9. Opencv map固定カメラ位置を使用して2Dピクセル座標を3Dワールド座標に変換する
- 10. GopenGLは、テクスチャ座標をワールド座標にアライメントします。
- 11. レイトレースの質問、どのように画面座標をワールド座標にマップするのですか?
- 12. 画面座標をlibgdxの正式なカメラ座標に変換しますか?
- 13. コンテナの座標空間から子の座標に座標を変換する
- 14. ARCoreスクリーン座標をワールド座標に合わせるOpenGL
- 15. JavaFXでポイント座標をスクリーン座標に変換しますか?
- 16. 2Dワールドをスクリーン座標に変換する方法OpenGL
- 17. GLモデルビュー行列をワールド座標に変換する
- 18. タイル座標からマップ座標に移動するにはどうすればよいですか?
- 19. D3で "絶対"オブジェクト座標とキャンバスGUI座標にアクセスするにはどうすればよいですか?
- 20. DOM変換座標と一致するようにThree.js座標系を変更するにはどうすればよいですか?
- 21. LongTouchListenerを使用して座標の座標を取得するにはどうすればよいですか?
- 22. イメージ座標をデカルト座標に変換する方法
- 23. マウスリスナーの座標をグラフの座標に変換する
- 24. 画面座標をシーン座標に変換する方法
- 25. ローカル座標をグローバル座標に変換する
- 26. MKMapkit XY座標を緯度座標に変換する
- 27. kinect v2の座標を別の座標に変換する
- 28. 座標ETRS89/LCCをWGS84 Lat座標に変換する
- 29. UIImageViewタッチ座標をUIImage座標に変換する
- 30. GPS座標をGoogleマップに変換する方法座標