在帮助另一个用户解决关于响应触摸事件安卓教程的问题后,我下载了源代码,但看到的内容让我感到困惑。该教程似乎不能确定它想使用行向量还是列向量,对我来说看起来混乱不堪。
在安卓矩阵页面上,他们声称他们的约定是列向量/列主元,这是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;
就算我尽力想也不可能觉得这是正确的。这里有什么解释我没看到的吗?