在幫助其他用戶提出有關Responding to Touch Events Android教程的問題後,我下載了源代碼,並對我所看到的內容感到非常困惑。該教程似乎無法確定是否要使用行向量或列向量,並且它看起來都與我混淆。Google的Android OpenGL教程是不正確的線性代數教學嗎?
在Android矩陣頁面上,他們聲稱他們的慣例是列向量/列主要,這是OpenGL的典型特徵。
我是對的,還是有我失蹤的東西?下面是它的相關位:
通過乘以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;
這是不是我的任何想象正確的。是否有任何解釋說我沒有看到這裏發生了什麼?
對我來說有兩種可能性。這個例子是錯誤的,或者他們以不同的方式實現了矩陣運算。 [見](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/opengl/Matrix.java) – 2012-09-01 10:51:15
你能否澄清一下問題,請嗎? – user1071136 2012-09-03 23:36:01