Учебник 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;

Что не является правильным из-за какого-либо натяжения моего воображения. Есть ли какое-то объяснение, которое я не вижу относительно того, что здесь происходит?

Ответы на вопрос(5)

Ваш ответ на вопрос