Editar: esta respuesta se encuentra en grave necesidad de una actualización. A saber, no hay consideración acerca de los sombreadores.
Como @gman señala en los comentarios, ya sea para usar row-major o column-major depende de cómo hagas tus cálculos. Puedes elegir uno u otro (o incluso ambos en diferentes momentos si no crees que sea confuso), siempre y cuando coincidan con tus sistemas de coordenadas y el orden de las operaciones.
Dejo esta respuesta como wiki de la comunidad en caso de que alguien tenga el tiempo y desee actualizarlo.
OpenGL especifica matrices como una matriz unidimensional enumerados en orden de columnas-mayor, es decir, con elementos ordenados como esto:
m0 m4 m8 m12
m1 m5 m9 m13
m2 m6 m10 m14
m3 m7 m11 m15
Así que si inicializar una matriz de esta manera, en C o prácticamente en cualquier otro idioma, la matriz resultante parecerá que necesita transposición, porque el código C lee de izquierda a derecha primero y luego de arriba a abajo (en otras palabras, como si estuviera en orden de fila mayor):
int mat[16] = {
0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11,
12, 13, 14, 15,
}
Por cierto, OpenGL tiene glLoadTransposeMatrix y glMultTransposeMatrix, que puede usar en lugar de glLoadMatrix y glMultMatrix, por lo que esto no debería ser un problema.
Entonces, ¿cómo puedo saber si las matrices de mi pregunta están en orden principal de columna o fila? –
La matriz de vista de modelo tiene elementos distintos de cero en la última fila, mientras que la última columna dice (0, 0, 0, 1). Esto significa que está en orden principal. (Según http://www.songho.ca/opengl/gl_transform.html#modelview) – Zecc
Mientras tanto, contrasta la matriz de proyección con la de este enlace - http://www.songho.ca/opengl/gl_projectionmatrix.html - Parece que está en orden de columna mayor. Sin embargo, tenga en cuenta que no he pensado mucho en esto. – Zecc