Essas funções são coluna-maior ou maior?

Estou comparando duas bibliotecas matemáticas lineares diferentes para gráficos 3D usando matrizes. Aqui estão duas funções semelhantes do Translate das duas 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 ++ do orgulho do usuário SO)

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;
 }

(biblioteca linmath c do usuário SO datenwolf)

Eu sou novo nessas coisas, mas sei que a ordem de multiplicação de matrizes depende muito do fato de você estar usando um formato de coluna principal ou de linha principal.

Aos meus olhos, estes dois estão usando o mesmo formato, em que tanto o primeiro índice é tratado como a linha, o segundo índice é a coluna. Ou seja, tanto nox y z são aplicados ao mesmo primeiro índice. Isso implicaria para mim row-major, e assim a multiplicação de matrizes é deixada associativa (por exemplo, você normalmente faria umarotate * translate naquela ordem).

Eu usei o primeiro exemplo muitas vezes em um contexto associativo à esquerda e ele está funcionando como esperado. Embora eu não tenha usado o segundo, o autor diz que é associativo à direita, mas estou tendo problemas para ver a diferença entre os formatos dos dois.

questionAnswers(2)

yourAnswerToTheQuestion