2011-07-01 8 views
1

OpenGL ESの新機能です。回転して翻訳した後にキューブのワールド座標を計算するのに役立ちますか?例:
最初に回転キューブ:
gl.glRotatef(90、1,0,0);
彼の位置を変更するよりも
gl.glTranslatef(10、0、0);

"新しい"世界座標をどのように計算できますか?私はglGetFloatv(GL_MODELVIEW_MATRIX、行列)について読んでいますが、理解できません。たぶん誰かがサンプルコードを提供することができます。

編集:
解決策が見つかりました。 Androidコード
float[] matrix = new float[] {
1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1,
};
Matrix.rotateM(matrix, 0, rx, 1, 0, 0);
Matrix.rotateM(matrix, 0, ry, 0, 1, 0);
Matrix.rotateM(matrix, 0, rz, 0, 0, 1);
Matrix.translateM(matrix, 0, x, y, z);
x = matrix[12];
y = matrix[13];
z = matrix[14];
お返事ありがとうございます。glRotatefとglTranslatefの後のOpenGLの位置

+1

キューブの新しい位置を探しているなら、間違ったことをする可能性が最も高いです。その行列は、描画を簡単にするためのものです(手ですべてを再計算することなく、さまざまな位置にあるものを描画できます)。私はゲームのロジックを計算するためにそれを使用しません。あなたが何をしようとしているかについての詳細は何ですか? – Mario

+0

この情報をお読みください-http://u.cs.biu.ac.il/~kapaho/CG/06_3d_trans.pdf#page=21 – URL87

答えて

0

質問の残りの部分について、あなたが望む部分についての回答がありますが(Javaエラーが発生した場合は私を許してください、私は実際にAndroidの人ではありません) :

float[] matrix = new float[16]; 

gl.glGetFloatv(GL_MODELVIEW_MATRIX, matrix); 

// check out matrix[12], matrix[13] and matrix[14] now for the world location 
// that (0, 0, 0) [, 1)] would be mapped to 

getFloatvは、指定されたfloatバッファにmodelview行列の現在の値を読み戻すだけです。 OpenGLの4x4行列では、インデックス0が左上、インデックス3が最初の列の最小番号、12が最初の行の最も右の番号になるように指定されています。 OpenGL FAQは完全にこの用語に満足していませんが、これは通常、列主レイアウトと呼ばれます。

関連する問題