¿El tutorial de Android OpenGL de Google enseña álgebra lineal incorrecta?

Después de ayudar a otro usuario con una pregunta sobre elRespondiendo a los eventos táctiles Tutorial de Android, descargué el código fuente y me sorprendió bastante lo que vi. El tutorial parece no poder decidir si quiere usar vectores de fila o vectores de columna, y todo parece estar mezclado para mí.

En la página de Android Matrix, afirman que su convención es column-vector / column-major, que es típica de OpenGL.

¿Tengo razón, o hay algo que me estoy perdiendo? Aquí están los bits relevantes de la misma:

Comience por crear un MVPMatrix multiplicando mProjMatrix * mVMatrix. Hasta ahora tan bueno.

    // 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)

¿Luego están agregando una rotación en el lado izquierdo de MVPMatrix? Esto parece un poco raro.

    // 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)

Subida en orden no transpuesto.

    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);

Finalmente en su shader, ¿una multiplicación de matrices vector *?

    // the matrix must be included as a modifier of gl_Position
    "  gl_Position = vPosition * uMVPMatrix;" 

Sumando todo esto, obtenemos:

gl_Position = vPosition * mRotation * mProjection * mView;

Lo cual no es correcto en ningún sentido de mi imaginación. ¿Hay alguna explicación que no esté viendo en lo que está pasando aquí?

Respuestas a la pregunta(5)

Su respuesta a la pregunta