オブジェクトのモデル行列を使用してOpenGLにオブジェクトを表示しています。これは、あらかじめ格納されているオブジェクトの場所と回転に適用された四元数から構築します。回転と変形が適用された後(オブジェクトが画面上に現れる座標)に、最後のデカルト座標をで見つけ出す必要があります。オブジェクトです。どのように私は平らな座標を得ることができますか?モデル行列または四元数から最終的な世界座標を求める
答えて
私が正しく理解している場合は、オブジェクトがあります。変換を適用せずにレンダリングした場合、その中心は[0,0,0]になります。
3D空間内に[a、b、c]というポイントがあります。モデルビューマトリックスに翻訳を適用します。ここでオブジェクトをレンダリングすると、その中心はワールド空間の座標で[a、b、c]になります。
あなたはクォータニオン、[qw、qx、qy、qz]を持っています。この場合、create a rotation matrix、Mをモデルビューマトリックスに適用します。今度は、世界空間内のオブジェクトの中心の新しい座標である[a '、b'、c ']を知りたいとします。
これがtrueの場合、最も簡単な方法は、ちょうど行列の乗算を自分で行うことです。
a' = m11*a + m12*b + m13*c
b' = m21*a + m22*b + m23*c
c' = m31*a + m32*b + m33*c
[m11 m12 m13]
M = [m21 m22 m23]
[m31 m32 m33]
しかし、おそらくあなたが実際にMを構築していません。もう1つの方法は、クォータニオンを直接使用することですが、基本的に回転行列を作成してから使用します。
gluProject
を実際に使用する必要はありません。回転をmodelview行列に適用すると、行列の乗算がそこで実行されます。モデルビュー行列は、モデルの原点を移動している場合これはあなたに伝え
double mv[16];
glGetDoublev(GL_MODELVIEW_MATRIX,mv);
a' = mv[13];
b' = mv[14];
c' = mv[15];
:だから、あなただけのマトリックス自体から値を得ることができます。
私は同様の方法でメソッドを実装しましたが、これはもっと簡単です。偉大な答えは、私は非常にすぐに来ている私の将来のプロジェクトであなたの方法を使用すると確信しています:) –
ありがとう、これは私を助けた。参考までに、glGetDoublevには小文字のvを付ける必要があります。あなた自身で変更するためにあなたの回答を編集したいと思いますが、1文字の編集をすることはできません。 –
@Mitch Thanks。それを私が直した。 – JCooper
gluProject()
を再実装し、ビューポートトランスフォーム以外のすべてを適用します。
少し残虐ではないでしょうか?私は行列と投影にはあまり良くないので、もっと簡単な方法があれば、最後の選択肢になるはずですか?またはgluProjectがシンプルな場合は、簡単な説明を見つけることができます(私が見つけたのは混乱しています) –
または現在の行列を押して、ビュー行列としてIDをロードし、モデル行列をmodelview行列としてロードして呼び出しますgluProjectは動作しますか? –
- 1. D3DXIntersectTriから世界座標を取得
- 2. 写真座標と世界座標
- 3. ビューを変換する世界座標とローカル座標をクリックしますか?
- 4. 2つの座標系を較正するために2つの四元数の回転差を求める
- 5. 実世界の座標をOpenGLの座標に変換
- 6. 世界座標でのカメラの位置をcv :: solvePnPから
- 7. MATLAB:多次元配列の値の座標を求める
- 8. GLSLコンピューティング画面が世界から座標が正しく
- 9. グラフィック - 世界座標からのTRIANGLE_FAN円座標とローカル座標の半径の決定
- 10. Java3D:世界座標でオブジェクトを回転していますか?
- 11. ARKit - 世界座標原点のみを更新する
- 12. XY平面内の点のグリッドをカメラ座標から実世界座標に変換
- 13. 世界的な互換性のために最も一般的なロケール
- 14. 行列/四元数問題
- 15. Kinect(Microsoft Sdk)スケルトン(記録)ピクセルから実世界座標へのデータ
- 16. 行列のリストから行列の次元を求めるR
- 17. Microsoft Kinect SDKの実世界座標への深さデータ
- 18. VTKでは、プロップの世界座標を取得する方法は?
- 19. IDをハッシュする境界の四角内のランダムなx、y座標
- 20. 座標点の最小値を求める
- 21. ジャイロスコープ:スマートフォンの世界座標系にデータを変換する方法は?
- 22. 複数次元の座標
- 23. モデル空間から、OpenGL ES 2.0の標準座標空間への座標を取る最も速い方法
- 24. 体を現在の世界から別の世界に移行する方法
- 25. 座標による2次元形状の最小境界矩形の計算
- 26. OPEN GL ES 1.0。世界がスクリーン座標へ私はこれを行うことを計画した3D-ピッキング
- 27. 世界の行列を構築する
- 28. トランス2D画像は、3Dの世界に座標私はz = 0の
- 29. スケール、回転などを含むすべての変換を適用し、ブレンダーの世界座標から定義された3Dモデルを作成する方法
- 30. 座標の配列で最大/最小境界を取得する方法
あなたは何を求めているのかよくわかりません...マトリクスにポイント座標ベクトルを掛けますか?ただし、画面上の位置を取得する場合は、カメラの行列も考慮する必要があります。 – cooky451
@ cooky451:ビューマトリックスは1つだけです。投影マトリックス(カメラと混同しないでください)と正規化ステップもあります。 – datenwolf
私は、回転を適用してオブジェクトのワールド座標を取得しようとしています(最終位置)。私は原点でオブジェクトを回転させないので、オブジェクトは非原点位置で回転するためにある程度のオフセットがあります。私は私が見ているその位置を見つける必要があります。 –