Домой
назад Оглавление вперед




[стр.-1]

Еще одним при другом методом создания однородной матрицы масштабирования является использование однородных координат [3]. Например, для того, чтобы произвести однородное масштабирование с фактором 5, можно использовать следующие матрицы:

S =

( 5

0

0

01

(1

0

0

0 Л

0

5

0

0

0

1

0

0

0

0

5

0

0

0

1

0

v 0

0

0

1J

v 0

0

0

1/5 у

Использование правого нижнего элемента для создания однородной матрицы масштабирования может быть неэффективным, так как в этом случае необходимо производить деление в процессе усреднения (homogenization process). Если правый нижний элемент равен единице, деления не происходит.

Если одно либо три значения фактора s отрицательны, создается матрица отражения (reflection matrix), также называемая зеркальной матрицей (mirror matrix). (В некоторых публикациях матрицей отражения называют матрицу, все компоненты фактора s которой равны -1, s = (-1, -1, -1)). Обычно в случае использования матриц отражения необходима дополнительная обработка. Например, треугольник с перечислением вершин против часовой стрелки (counter-clockwise order) преобразуется в треугольник с перечислением вершин по часовой стрелке (clockwise order). Изменение их порядка перечисления может вызвать неправильное освещение полигона и неправильную работу алгоритма отброса невидимых треугольников (back-face culling). Для того чтобы узнать, является ли данная матрица матрицей отражения, необходимо рассчитать определитель дополнительного минора для правого нижнего элемента, т.е. для левой верхней матрицы размерностью 3х3. Если определитель отрицательный, то это матрица отражения.

Предположим, необходимо масштабировать объект в определенном направлении. С помощью матрицы S производится масштабирование только вдоль осей x, y и z. При масштабировании в другом направлении требуется составная трансформация. Предположим, масштабирование необходимо произвести вдоль ортонормированных право-ориентированных векторов f,f,f. Для начала построим матрицу F:

F = (fx fy fz 0"

V 0 0 0 1 /

Координатная система строится из полученных векторов, далее используется стандартная матрица трансформации и затем осуществляется обратное преобразование. При этом требуемое преобразование Х будет иметь вид X = F S(s) FT.

Сдвиг

Другой класс трансформаций - это набор матриц сдвига (shearing). Такие трансформации могут быть использованы для искажения или деформации объекта. Существуют шесть базовых матриц сдвига: Hxy(s), Hxz(s), Hyx(s), Hyz(s), Hzx(s), Hzy(s). Первый индекс указывает на координату, которая будет изменена матрицей сдвига, второй индекс - на координату, по которой будет производиться сдвиг. Матрица сдвига может иметь вид

(10 s 0

0 10 0

0 0 10

v0 0 0 1J

Следует отметить, что индекс может быть использован для нахождения местоположения параметра s в матрице. (Координаты y и z не изменяются, тогда как координата меняется на сумму старого значения и фактора s умноженного на координату z) (рис. 3).


Рис. 3. Сдвиг единичного прямоугольника матрицей Hxz(s).

Обратной матрицей сдвига является матрица сдвига в противоположном направлении: т.е. Hyx-1(s)=Hyx(s). Определитель любой матрицы сдвига равен единице. Следовательно, это есть преобразование, сохраняющее объем.

Совмещение трансформаций

Вследствие того что операция произведения матриц некоммутативна , важен правильный порядок применения трансформаций. Другими словами, совмещенная трансформация зависит от порядка следования составляющих трансформаций.

Предположим, необходимо применить две трансформации - S и R: S(2; 0.5; 1) масштабирует объект по x-компоненте с фактором 2 и по y-компоненте с фактором 0.5, Rz(n/6) вращает на л/6 радиан против часовой стрелки вокруг оси z. Матрицы могут быть перемножены двумя способами с совершенно различным результатом (рис. 4).

Рис. 4. Зависимость порядка перемножения матриц

Для повышения эффективности процесса целесообразно совмещение последовательности матриц в одну [3]. Предположим, что есть модель, составленная из сотен тысяч вершин, и необходимо произвести масштабирование, вращение и перемещение. Вместо того чтобы последовательно умножать все вершины на три матрицы, можно один раз умножить на совмещенную матрицу, которая будет иметь вид C=TRS. При одном подходе применяется матрица масштабирования S, поэтому она стоит


в правой части выражения. Этот порядок предполагает, что TRSp=T[R(Sp)]. При другом распространенном в компьютерной графике подходе используют матрицы, в которых вектор сдвига располагается в нижней строке. В этом случае порядок умножения матриц должен быть обратным, т. е. порядок применения должен читаться слева направо. Имеется ввиду , что векторы и матрицы записаны в виде строк, поскольку векторы представляют собой строки. В статье использовалась запись в виде столбцов.

Трансформация твердого тела

Трансформация, при которой изменяются только позиция и ориентация объекта, называется трансформацией твердого тела (rigid-body transform). Для нее свойственно сохранение длин и углов [5].

Любая трансформация твердого тела X может быть определена матрицей, состоящей из композиции матрицы перемещения T(t) и матрицы вращения, R. Таким образом, матрица Х имеет вид

X = T(t)R

( r

r01

r

02

tx 1

r10

r11

r

r

22

tz

V0

0

0

1 J

Обратнаяматрица

X-1 =(T(t)R)-1 R1 T(t)-1 =RTT(-t).

вычисляется

следующим

образом:

Трансформация нормалей

Одна и та же матрица может быть использована для единообразной трансформации точек, линий, полигонов и других геометрических примитивов. Однако эта же матрица не всегда используется для преобразования важной геометрической сущности - нормали к поверхности (либо нормали, заданной в вершине для ее корректного освещения). Нормали должны преобразовываться матрицей, полученной транспонированием матрицы, обратной к той, которая использовалась для преобразования геометрии, т. е. при условии преобразования матрицей М. Для преобразования нормалей необходима матрица N вида, ЛКМрис. 5).

Рис. 5. Примеры некорректной и корректной трансформации нормалей.

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



[стр.Начало] [стр.1] [стр.2]