Помещение А
Говоря о матрицах "Major Column" в линейной памяти, столбцы указываются один за другим, так что первые 4 записи в памяти соответствуют первому столбцу в матрице. С другой стороны, под "матрицами мажорных строк" понимаются строки, которые задаются одна за другой, так что первые 4 записи в памяти указывают первую строку матрицы.
GLKMatrix4
выглядит так:
union _GLKMatrix4
{
struct
{
float m00, m01, m02, m03;
float m10, m11, m12, m13;
float m20, m21, m22, m23;
float m30, m31, m32, m33;
};
float m[16];
}
typedef union _GLKMatrix4 GLKMatrix4;
В документации на m
член сказано:
Одномерный массив элементов матриц в основном порядке столбцов.
Помещение Б
"Строка" в GLKMatrix4 - это набор из 4 поплавков, объявленных горизонтально ([m00, m01, m02, m03]
будет первой "строкой"). Таким образом, эти записи могут быть интерпретированы как mRowCol (m12
будет запись в строке 1, столбце 2).
Если мы посмотрим, как эти элементы структуры GLKMatrix расположены в соответствии с порядком объявлений, мы увидим:
[m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23,...]
Где первые 4 записи четко представляют первую строку матрицы, а не первый столбец.
Заключение
m
самом деле не является основной колонной, и документы не правы.
Теперь я должен отметить, что на самом деле я не верю заключению, но две предпосылки кажутся довольно разумными. Действительно, я больше всего не доверяю предпосылке B, но кажется странным определять "строку" как вертикальную, а "столбец" - горизонтальную. Может кто-нибудь объяснить это?