Учебник Google по OpenGL для Android учит неправильной линейной алгебре?
После помощи другому пользователю с вопросом относительноРеагирование на сенсорные события Учебник по Android, я скачал исходный код и был довольно озадачен увиденным. Учебное пособие, похоже, не может решить, хочет ли оно использовать векторы строк или столбцы, и мне кажется, что это все смешалось.
На странице Android Matrix они утверждают, что их соглашение - это column-vector / column-major, что типично для 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;
Что не является правильным из-за какого-либо натяжения моего воображения. Есть ли какое-то объяснение, которое я не вижу относительно того, что здесь происходит?