O tutorial Android OpenGL do Google está ensinando álgebra linear incorreta?

Depois de ajudar outro usuário com uma pergunta sobre oRespondendo a eventos de toque Tutorial Android, eu baixei o código-fonte, e fiquei muito perplexo com o que vi. O tutorial parece não ser capaz de decidir se quer usar vetores de linha ou vetores de coluna, e parece tudo misturado comigo.

Na página Matriz do Android, eles afirmam que sua convenção é coluna-vetor / coluna maior, o que é típico do OpenGL.

Estou certo ou há algo que eu esteja sentindo falta? Aqui estão os bits relevantes:

Comece criando um MVPMatrix multiplicando o mProjMatrix * mVMatrix. Por enquanto, tudo bem.

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

Em seguida eles estão anexando uma rotação para o lado esquerdo do MVPMatrix? Isso parece um pouco estranho.

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

Upload em ordem não transposta.

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

Finalmente em seu shader, uma multiplicação de matriz vetorial *?

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

Somando tudo isso, conseguimos:

gl_Position = vPosition * mRotation * mProjection * mView;

O que não está correto em nenhum momento da minha imaginação. Existe alguma explicação que eu não esteja vendo sobre o que está acontecendo aqui?

questionAnswers(5)

yourAnswerToTheQuestion