Являются ли эти функции основными по столбцам или основными по строкам?

Сравнение двух разных линейных математических библиотек для трехмерной графики с использованием матриц. Вот две похожие функции Translate из двух библиотек:

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

(библиотека c ++ из SO prideout)

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 от пользователя SO datenwolf)

Я новичок в этом, но я знаю, что порядок умножения матриц во многом зависит от того, используете ли вы формат столбца или строки.

На мой взгляд, эти два используют один и тот же формат, в котором первый индекс рассматривается как строка, а второй - столбец. То есть в обоихx y z применяются к тому же первому индексу. Это означало бы для меня мажор строки, и, таким образом, умножение матриц остается ассоциативным (например, выобычно делаюrotate * translate в этой последовательности).

Я использовал первый пример много раз в левом ассоциативном контексте, и он работал как ожидалось. В то время как я не использовал второй, автор говорит, что это право-ассоциативный, но яМне трудно увидеть разницу между форматами.

Ответы на вопрос(2)

Ваш ответ на вопрос