¿Son estas funciones columna mayor o fila mayor?

Estoy comparando dos bibliotecas de matemática lineal diferentes para gráficos 3D usando matrices. Aquí hay dos funciones de traducción similares de las dos bibliotecas:

static Matrix4<T> Translate(T x, T y, T z)
{
    Matrix4 m;
    m.x.x = 1; m.x.y = 0; m.x.z = 0; m.x.w = 0;
    m.y.x = 0; m.y.y = 1; m.y.z = 0; m.y.w = 0;
    m.z.x = 0; m.z.y = 0; m.z.z = 1; m.z.w = 0;
    m.w.x = x; m.w.y = y; m.w.z = z; m.w.w = 1;
    return m;
}

(biblioteca c ++ de SO prideout del usuario)

static inline void mat4x4_translate(mat4x4 T, float x, float y, float z)
{    
mat4x4_identity(T);
T[3][0] = x;
T[3][1] = y;
T[3][2] = z;
 }

(linmath c library de SO user datenwolf)

Soy nuevo en esto, pero sé que el orden de la multiplicación de matrices depende mucho de si está utilizando un formato de columna mayor o de fila.

En mi opinión, estos dos están usando el mismo formato, ya que en ambos el primer índice se trata como la fila, el segundo índice es la columna. Es decir, tanto en elx y z Se aplican al mismo primer índice. Esto implicaría para mí una fila mayor, y por lo tanto la multiplicación de matrices se deja asociativa (por ejemplo, normalmente harías unarotate * translate en ese orden).

He usado el primer ejemplo muchas veces en un contexto asociativo de izquierda y ha funcionado como se esperaba. Si bien no he usado el segundo, el autor dice que es asociativo por derecho, pero tengo problemas para ver la diferencia entre los formatos de los dos.

Respuestas a la pregunta(2)

Su respuesta a la pregunta