Компьютерная графика | ||||||||||||||||||||||||||||||
теория, алгоритмы, примеры на С++ и OpenGL | ||||||||||||||||||||||||||||||
2D теория | 3D теория | OpenGL | Обратная связь / Авторам | |||||||||||||||||||||||||||
Мы vkontakte.ru ДрузьяСловарь синонимов русского языка |
Аффинные преобразования пространстваПри работе с трехмерными объектами, часто требуется совершать по отношению к ним различные преобразования: двигать, поворачивать, сжимать, растягивать, скашивать и т.д. При этом в большинстве случаев требуется, чтобы после применения этих преобразований сохранялись определенные свойства. Определение. Преобразование плоскости называется аффинным (от англ. affinity – родство), если
Преобразование называется взаимно однозначным, если
Свойства аффинного преобразования в трехмерном пространстве:
Любое аффинное преобразование задается матрицей 3x3 с ненулевым определителем и вектором переноса:
Посмотрим на это с точки зрения математики. R представляет собой матрицу линейного оператора над пространством трехмерных векторов. Вектор T требуется для осуществления параллельного переноса: если помножить ( 0 0 0 ) на любую матрицу 3x3, опять получим ( 0 0 0 ) – начало системы координат, относительно преобразования R, является неподвижно точкой. Требование, чтобы определитель был ненулевой, диктуется определением. По сути, если определитель матрицы R равен нулю, то всё пространство переходит в плоскость, прямую или точку. Тем самым не соблюдается взаимная однозначность. На практике удобно задавать аффинное преобразование одной матрицей. При этом используются однородные координаты, введенные в предыдущей статье. Аффинное преобразование будет задаваться следующей матрицей 4x4:
Заметим, что первые три значения последней строки равны 0. Это необходимое условие того, что преобразование будет аффинным. В общем случае произвольная матрица размера 4x4 задает проективное преобразование. Такие преобразования, как можно догадаться из названия, используются для проецирования трехмерной сцены. Подробнее об этом будет рассказано в одной из последующих статей. Рассмотрим частные случаи аффинных преобразований. Прим. Здесь и в дальнейшем будет использоваться система координат, введенная следующим образом:
Подробнее мы остановимся на этом при рассмотрении геометрического конвейера. Параллельный перенос
Матрица этого преобразования выглядит следующим образом:
В
данном случае матрица R = E, единичной
матрице. Преобразования, рассматриваемые ниже, затрагивают только матрицу R, поэтому будет указываться только она. Поворот (вращение)
Если на плоскости повороты делались вокруг некоторой точки, то в трехмерном пространстве повороты производятся вокруг некоторого вектора. Перед тем, как перейти к построению матрицы поворота вокруг произвольного вектора, рассмотрим частные случаи поворотов вокруг координатных осей. Прим. Поворот вокруг произвольного вектора не равно поворот вокруг произвольной направленной прямой. Поворот вокруг оси y
Заметим, что при повороте вокруг оси y ординаты точек (у-координаты) не меняются. Также стоит отметить, что координаты x и z точки преобразуются независимо от y-координаты. Это означает, что любая точка p(x, y, z) перейдет в точку p’(x’(x, z), y, z’(x, y)). Теперь осталось понять, как преобразуются координаты x и z: в плоскости Oxz это будет поворот вокруг начала координат по часовой стрелке (т.к. x z y - левая тройка), т.е. в отрицательном направлении. Матрица такого преобразования известна (см. Поворот плоскости):
В итоге:
Матрица преобразования Ry(φy):
Поворот вокруг осей x и z
Аналогичными рассуждениями можно получить матрицы поворотов Rx(φx) и Rz(φz)вокруг осей x и z, соответственно. Приведём окончательные результаты:
Несложно заметить, что определители матриц Rx, Ry, Rz равны 1. Также матрицы вращений Rrot обладают свойством ортогональности: RTR = RRT = E. Из этого, в свою очередь, следует полезное свойство, что обращение матрицы поворота можно заменить транспонированием: R-1(φ) = RT(φ). Масштабирование (сжатие/растяжение, отражение)
Коэффициенты сжатия/растяжения, по аналогии с двухмерным пространством, определяются диагональными членами матрицы R:
Результат:
Комбинация коэффициентов sx = -1, sy = 1, sz = 1 будет задавать отражение от плоскости Oyz (x = 0). При sx = sy = sz = -1 получим центральную симметрию относительно начала координат. Интерпретация матрицы RРассмотрим, что представляет собой матрица R с точки зрения линейной алгебры. Оказывается, что матрица R содержит базис новой системы координат. Действительно, матрица ( R11 R12 R13 )
( R21 R22 R33 )
( R31 R32 R33 )
переводит вектора декартова базиса: ( 1
0 0 ) → ( R11 R21 R31 ) ( 0 1 0 ) → ( R12 R22 R32 ) ( 0
0 1 ) → ( R13 R23 R33 ) Скос
Теперь несложно получить преобразование скоса. Например:
Прим. Если придерживаться общепринятой терминологии, то приведенное выше преобразование называется сдвигом. Сдвигом (shear) будет любое преобразование, главная диагональ матрицы R которого единичная. Если при этом определитель матрицы R равен нулю, то преобразование не является аффинным. Сложные аффинные преобразованияСложные аффинные преобразования можно получить как комбинацию простых (элементарных) преобразований. При этом выбирать простые аффинные преобразования можно по разному. Например, поворот можно представить как комбинацию масштабирования и сдвига. Тем не менее, для удобства, поворот также считается элементарным преобразованием. Поворот вокруг произвольного вектора представляется как комбинация поворотов вокруг координатных осей. Об этом будет подробно рассказано в следующей статье. |