Как GLKit's GLKMatrix «Главный столбец»?

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

15
задан Cœur 27 March 2019 в 14:29
поделиться