Использование формата столбца-мажора в спецификации и синей книге - PullRequest
6 голосов
/ 11 ноября 2011

Я только что прочитал FAQ по OpenGL здесь: http://www.opengl.org/resources/faq/technical/transformations.htm

Посмотрите на их раздел, озаглавленный "9.005 Матрицы OpenGL - основной столбец или основной ряд?" Внизу написано:

«К сожалению, использование формата основных столбцов в спецификации и синей книге привело к бесконечной путанице в сообществе программистов OpenGL. Обозначения основных столбцов предполагают, что матрицы не располагаются в памяти, как этого ожидал бы программист».

Теперь я изо всех сил старался всегда передавать матричные данные в OpenGL в главном порядке столбцов, чтобы не тратить время обработки OpenGL на операции транспонирования. Но означает ли ответ на этот FAQ, что мне не нужно это делать?

1 Ответ

8 голосов
/ 11 ноября 2011

Часто задаваемые вопросы немного устарели. Технически с OpenGL-3 можно передавать матрицы в формате строки, задав для параметра transpose для glUniformMatrix значение true.

Однако лично я нахожу, что столбец майора упорядочивает огромное преимущество: он позволяет напрямую обращаться к базовым векторам системы координат (преобразования), которую описывает матрица. Посмотрите на вашу типичную матрицу преобразования

X_x Y_x Z_x T_x
X_y Y_y Z_y T_y
X_z Y_z Z_z T_z
W_a W_b W_c W_w

X, Y и Z - базовые векторы системы координат, в которую вы преобразуетесь, T - смещение.

Теперь посмотрим на индексирование, используемое OpenGL

0 4 8 c
1 5 9 d
2 6 a e
3 7 b f

Таким образом, в смещении 0 вы найдете вектор X, на смещении 4 вы найдете Y, смещение 8 даст Z, а смещение c даст T. Вы можете получить к ним доступ напрямую, передать их функциям управления вектором, таким как

float vec4_length3(float v[4]);

прямым путем:

float M[16] = {...};

float T_length = vec4_length3(&M[c]);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...