タッチイベントへの応答Androidチュートリアルに関する質問で別のユーザーを支援した後、ソースコードをダウンロードしましたが、見たものにかなり戸惑いました。チュートリアルでは、行ベクトルと列ベクトルのどちらを使用するかを決定できないようで、すべてが混乱しているように見えます。
Android Matrixページで、彼らは、彼らの慣習は、OpenGLに典型的なcolumn-vector/column-majorであると主張しています。
私は正しいですか、それとも私が欠けているものがありますか?関連する部分は次のとおりです。
mProjMatrix * mVMatrixを乗算して、MVPMatrixを作成することから始めます。ここまでは順調ですね。
// Set the camera position (View matrix)
Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
// Calculate the projection and view transformation
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0)
次に、MVPMatrixの左側に回転を追加していますか?これは少し奇妙に思えます。
// Create a rotation for the triangle
Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f);
// Combine the rotation matrix with the projection and camera view
Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0)
転置されていない順序でアップロードします。
GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);
最後に、シェーダーで、ベクトル*行列の乗算?
// the matrix must be included as a modifier of gl_Position
" gl_Position = vPosition * uMVPMatrix;"
これをすべて足し合わせると、次のようになります。
gl_Position = vPosition * mRotation * mProjection * mView;
これは私の想像力の範囲では正しくありません。ここで何が起こっているのかわからないという説明はありますか?