Посылка A
Когда речь идет о матрицах «Главный столбец» в линейных памяти столбцы указываются один за другим, так что первые 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
гласит:
Одномерный массив элементов матрицы в основной колонке приказ.
Предпосылка B
«Строка» в 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, но кажется странным определять «строку» как вертикальную, а «столбец» как горизонтальную. Кто-нибудь может это объяснить?