После того, как другой пользователь задал вопрос о Отвечать на события Touch, я загрузил исходный код и был совершенно озадачен тем, что Я видел. Учебник, похоже, не может решить, хочет ли он использовать векторы строк или векторы столбцов, и это выглядит смешано со мной.
На странице Android Matrix они утверждают, что их соглашение - это столбец-вектор/столбца-майор, что является типичным для OpenGL.
Я прав, или что-то мне не хватает? Вот их соответствующие биты:
Начните с создания MVPMatrix путем умножения mProjMatrix * mVMatrix. Пока все хорошо.
// 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;
Это неверно по моему воображению. Есть ли объяснение, что я не вижу, что происходит здесь?