Usando row-major no shader OpenGL

Eu vi isso noSite OpenGL:

As variáveis ​​de atributo do OpenGL Shading Language podem ser do tipo mat2, mat3 ou mat4. Atributos desses tipos podem ser carregados usando os pontos de entrada glVertexAttrib. As matrizes devem ser carregadas em sucessivos slots de atributos genéricos na ordem principal da coluna, com uma coluna da matriz em cada slot de atributo genérico.

Eu tenho sido sucessivamente usando uma biblioteca de vetores que é baseada em linha maior. Ou seja, os 16 elementos da matriz 4x4 são dispostos assim em uma estrutura:

vec4 x;
vec4 y;
vec4 z;
vec4 w;

Onde cadavec4 tem componentesx, y, z, w, Então, oordem linear O conteúdo é maior que a primeira linha, já que a primeira linha ocupa as primeiras 4 posições na memória, e a matemática da matriz é tratada como tal, por exemplo, esta transformação de rotação:

 static Matrix4<T> RotateZ(T degrees)
{
    T radians = degrees * 3.14159f / 180.0f;
    T s = std::sin(radians);
    T c = std::cos(radians);

    Matrix4 m;
    m.x.x =  c; m.x.y = s; m.x.z = 0; m.x.w = 0;
    m.y.x = -s; m.y.y = c; 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 =  0; m.w.y = 0; m.w.z = 0; m.w.w = 1;
    return m;
}

A biblioteca é composta por linhas principais para suportar cálculos da esquerda para a direita ao escrever o código do lado do cliente, o que é natural para muitos programadores. Mas o que eu não entendo é que essas matrizes principais de linha estão sendo enviadas como estão para os shaders, que, de acordo com o acima, esperam colunas maiores.

Eu entendo que o shader realiza cálculos da direita para a esquerda. Mas não deveria ser transposta uma matriz principal de linha, por isso é importante em coluna antes de ser alimentada em um shader? Eu não tenho feito isso, mas está funcionando bem.

questionAnswers(1)

yourAnswerToTheQuestion