在帮助另一位用户解决有关响应触摸事件Android 教程的问题后,我下载了源代码,并且对我所看到的内容感到非常困惑。该教程似乎无法决定是要使用行向量还是列向量,而且在我看来一切都混在一起了。
在 Android Matrix 页面上,他们声称他们的约定是列向量/列优先,这是 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;
根据我的任何想象,这是不正确的。关于这里发生的事情,有什么我没有看到的解释吗?