Матрицы в OpenGL - PullRequest
       4

Матрицы в OpenGL

0 голосов
/ 27 января 2011

Итак, я изучаю OpenGL в качестве основного ресурса, имеющего «Красную книгу».Я читаю об матричной алгебре, матрицах вращения / масштабирования / преобразования, и все отлично, но у меня просто нет одной простой вещи.Допустим, функция glLoadIdentity ().Он устанавливает матрицу по умолчанию 4x4.Таким образом, он устанавливает 3 вершины и 1 точку: (1,0,0) (0,1,0) (0,0,1) вершин, (0,0,0) точек.Но мой вопрос, что они соответствуют?Вообще, что соответствует матрице в OpenGL?Я понял, что это направления осей.Но оси чего?Камера?

Ответы [ 2 ]

5 голосов
/ 27 января 2011

Матрицы OpenGL соответствуют только преобразованию, перемещению объектов, векторов и точек, определенных в одном координатном пространстве в другое. Если у вас есть матрица M (m11 - m44, как показано ниже) и вектор V (v1 - v4) в одном координатном пространстве, то умножение на M преобразует ваш вектор V (который может описывать вектор движения, местоположение объекта или вершину объекта). ) к W (w1-w4) в другом координатном пространстве:

| m11 m12 m13 m14 |   | v1 |     | w1 |
| m21 m22 m23 m24 |   | v2 |     | w2 |
| m31 m32 m33 m34 | X | v3 |  =  | w3 |
| m41 m42 m43 m44 |   | v4 |     | w4 |

Где:

w1 = m11 * v1 + m12 * v2 + m13 * v3 + m14 * v4
w2 = m21 * v1 + m22 * v2 + m23 * v3 + m24 * v4
w3 = m31 * v1 + m32 * v2 + m33 * v3 + m34 * v4
w4 = m41 * v1 + m42 * v2 + m43 * v3 + m44 * v4

Так что, если мы думаем о v1 - v3 как о старых координатах x, y и z и устанавливаем v4 в 1, то мы можем думать о w1 - w3 как о новых координатах x, y и z, есть несколько вещей, которые мы можем см:
m11 - это множитель от старой координаты x до новой, поэтому он используется в преобразованиях масштаба (и аналогично для m22 и m33)
m14 умножается на 1 и добавляется к новой координате x, поэтому он используется для переводов (и аналогично для m24 и m34)

Вращения немного сложнее осмыслить, но они выполняются путем установки других значений матрицы в соответствующие значения. Вы можете прочитать больше здесь: http://gpwiki.org/index.php/Matrix_math

0 голосов
/ 27 января 2011

Матрица по умолчанию - это просто единичная матрица:

/1 0 0 0\
|0 1 0 0|
|0 0 1 0|
\0 0 0 1/

В более общем случае (игнорирование перспективы и, возможно, других экзотических преобразований) ...

/a d g j\
|b e h k|
|c f i l|
\0 0 0 1/

... компоненты преобразованной системы координат следующие:

         /a\
X-axis = |b|
         \c/

         /d\
Y-axis = |e|
         \f/


         /g\
Z-axis = |h|
         \i/

         /j\
Origin = |k|
         \l/

Если вы соотнесете их с единичной матрицей, вы увидите, откуда берутся ваши "3 вершины и 1 точка".

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

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