Аффинные преобразования. Графический конвейер

advertisement
Аффинные преобразования
Графический конвейер
Астана. Лекция 7
На прошлой лекции
• Типовая схема графической обработки
• Геометрическое моделирование
– Представление трехмерных данных в компьютере
• Используется декартова система координат
– Трехмерная для представления объемных объектов и
поверхностей
• Представление трехмерных данных
–
–
–
–
Каркасное («структура» объекта)
Грани и ребра (поверхность объекта)
Воксельное (объем)
Конструктивная геометрия (объем)
На лекции
• Типы преобразований
–
–
–
–
–
•
•
•
•
Нелинейные преобразования
Линейные преобразования
Аффинные преобразования
Преобразования подобия
Изометрические преобразования
Классификация проективных преобразований
Однородные координаты
Комбинация, иерархия преобразований
Графический конвейер
– Локальные, мировые, экранные координаты
Что такое геометрические
преобразования?
• Модель
– Например, описание
поверхности трехмерного
объекта
– Некоторое подмножество
точек декартова
пространства
• Какие геометрические
операции можно
применять к модели?
• Преобразование моделей –
важный инструмент в
геометрическом
моделирование и синтезе
изображений
– Вспомните CSG
Типы преобразований
• Нелинейные преобразования
• Линейные преобразования
– Также называются проективными
– Прямые переходят в прямые
• Аффинные преобразования
– Сохраняется параллельность линией
– Пример: сдвиг
• Преобразование подобия
– Сохраняются углы
– Пример: равномерное масштабирование
• Изометрия
– Сохраняются расстояния
– Пример: поворот, перенос
Нелинейные преобразования
• Произвольное
преобразование точек
модели
M’=T(M)
Линейные преобразования
x'  Ax  By  Cz  D
y '  Ex  Fy  Gz  H
z '  Ix  Jy  Kz  L
• Линейное преобразование применяется к каждой
точке (вершине) модели.
• Не изменяет топологию!
Перенос
x '  x  x
y '  y  y
z '  z  z
x
y
Изометрия
Масштабирование
x '  ax
y '  by
z '  cz
Подобие
Поворот (2D)
x'  x cos   y sin 
y '  x sin   y cos 
Изометрия
Сдвиг (2D)
x'  x  ay
y '  y  bx
Аффинное
преобразование
Преобразование в матричной
форме
x'  Ax  By  Cz  D
y '  Ex  Fy  Gz  H
z '  Ix  Jy  Kz  L
A B
 x'  
  E F
 y'   
 z'   I J
  0 0

C
G
K
0
D  x
  
H   y
 

L
z
  
1   1 
Однородные координаты
• Какой смысл имеет
использование 4х
компонент вектора?
– Позволяет использовать
матричную запись для
всех линейных
преобразований (если
использовать матрицы
3x3, невозможно
представить перенос)
– Позволяет описать так
называемой
перспективное деление
Параллельный перенос
x '  x  x
y '  y  y
z '  z  z
1
 x'  
  0
 y'   
 z'   0
  0

0 0 x   x 
  
1 0 y   y 
 

0 1 z
z
  
0 0 1   1 
Масштабирование
x '  ax
y '  by
z '  cz
a
 x'  
  0
 y'   
 z'   0
  0

0 0 0  x 
  
b 0 0  y 
 

0 c 0
z
  
0 0 1   1 
Поворот (2D)
x'  x cos   y sin 
y '  x sin   y cos 
 cos 
 x'  
   sin 
 y'   
 z'   0
   0

 sin 
cos 
0
0
0 0  x 
  
0 0  y 
 

1 0
z
  
0 1   1 
Поворот вокруг оси Z
y
x
z
 cos 
 x'  
   sin 
 y'   
 z'   0
   0

 sin 
cos 
0
0
0 0  x 
  
0 0  y 
 

1 0
z
  
0 1   1 
Поворот вокруг оси X
y
x
z
 1
 x'  
   cos 
 y'   
 z '   sin 
   0

0
 sin 
cos 
0
0 0  x 
  
0 0  y 
 

1 0
z
  
0 1   1 
Поворот вокруг оси Y
y
x
z
 cos 
 x'  
   0
 y'   
 z '    sin 
   0

sin 
1
cos 
0
0 0  x 
  
0 0  y 
 

1 0
z
  
0 1   1 
Сдвиг
x'  x  ay
y '  y  bx
1
 x'  
  b
 y'   
 z'   0
  0

a 0 0  x 
  
1 0 0  y 
 

0 1 0
z
  
0 0 1   1 
Наши обозначения
•
•
•
•
Перенос [T a,b,c]
Поворот [R theta] ([R axis, theta])
Масштабирование [S a,b,c]
Сдвиг [Sh a,b,c]
Суперпозиция преобразований

Повернуть вокруг
центра
b
а
Записывать так
 x' 
 x
 
 
 y' 
 y
 z '   (([T  a,b] * ([ R  ] *[T  a,b]))   z )
 
 
1
1
Произносить
так
 
 
Произведение матриц
• Произведение матриц не коммутативно!
• AB != BA
Поворот, затем
перенос
Перенос, затем
поворот
Произведение матриц (2)
• Произведение матриц ассоциативно
• Можно перемножить матрицы и применять
одно составное преобразование для всей
геометрии!
 x' 
 x
 
 
 y' 
 y
 z'   M   z 
 
 
1
1
 
 
Задача
T(-1,-1)
Sh(-1, 0)
(4,2.5)
S(1,2.5)
(2,2)
T(4,0)
(1,1)
(6,0)
(3,1)
(4,0)
Решение задачи
•
•
•
•
T(-1,-1)
Sh(-1, 0)
S(1,2.5)
T(4,0)
• P’= T(4,0) * S(1,2.5) * Sh(-1, 0) * T(-1,-1) * P
Иерархия преобразований
Составить
манипулятор из
трех частей
3
2
1
Задача
3
2
1
Позиционирование части 1
1. Поворачиваем на 1
2. Переносим на 1g
M 1G  T1G * R
Позиционирование части 2
1.
2.
3.
4.
Поворачиваем на 2
Переносим на размер части 1
Поворачиваем на 1
Переносим на 1g
M 2 /1  T1G * R *T21 * R 2
Позиционирование части 3
1.
2.
3.
4.
5.
6.
Поворачиваем на 3
Переносим на размер части 2
Поворачиваем на 2
Переносим на размер части 1
Поворачиваем на 1
Переносим на 1g
M 3 / 2  T1G * R * T21 * R 2 * T32 * R 3
Результат
3
M  M 1/ G * M 2 / 1 * M 3 / 2
2
1
Проективные преобразования
• Важнейший класс преобразований
• Все современные дисплеи визуализируют
изображение => необходимо
преобразовать 3D данные в 2D !
• Для выполнения таких преобразований
применяются проективные
преобразования.
• Описываются матрицей 4x4 (линейным
преобразованием)
Типы проекций
• Много разновидностей
– Применяются в дизайне
и т.п.
• Основные виды
– Параллельные
• Ортографические
• Косоугольные
– Перспективные
• 1,2,3-х точечные
Ортографическая проекция
Изометрия
Военная проекция
Кабинетная проекция
Косоугольные проекции
•
•
•
•
Направление проецирования
(l cos  ,l sin  ,1)
Угол между косыми проекторами и
плоскостью проекции
  arcctg (l )
Военная проекция
  arcctg (1)  45
Кабинетная проекция
  arcctg (1 / 2)  63.435
Фотография
Перспективная проекция
Перспективная проекция и
однородные координаты
• Применяем матрицу M’per
 x   x 
 
 y  y 
M ' per    
0 
z

  
 1   z  1
   d 
• Четверная компонента не
равна 1 !
– Т.е. Результат уже не в
декартовых координатах.
• Необходима нормализация
x  x/ w
Двухточечная проекция
Виртуальная камера
• Определяет положение наблюдателя в
пространстве
• Параметры
–
–
–
–
Положение
Направление взгляда
Направление «вверх»
Матрица проекции
• Положение, направление взгляда и
направление «вверх» задаются матрицей
видового преобразования
Видовое преобразование
•
Для чего нужно еще одно преобразование?
•
Заметим, что проективные преобразования описывают
«стандартные» проекции, т.е. проецируют фиксированную
часть пространства
Что если мы хотим переместить наблюдателя?
•
–
–
•
Изменить матрицу проекции чтобы включить в нее
информации о камере
Применить дополнительное преобразование, «подгоняющее»
объекты под стандартную камеру
Стандартная камера:
–
–
–
Наблюдатель в (0, 0, 0)
Смотрит по направлению (0, 0, -1)
Верх (0, 1, 0)
Графический конвейер
Модельное преобразование
• Переводит модель, заданную в локальных (собственных)
координатах, в глобальное (мировое пространство)
• Модель «собирается» из частей, с помощью модельных
преобразований
• На выходе – модель в единых мировых координатах
Видовое преобразование
• «Подгоняет» мир под стандартную камеру,
преобразует мировую систему координат в
видовые координаты (которые подходят для
«стандартной» камеры
• На выходе – модель, готовая к проекции на экран
Проективное преобразование
• Выполняет 3D преобразование, подготавливая модель к
переходу на 2D
• После перспективного преобразования необходимо
отбросить координату z и получить значения в оконных
координатах (обычно от –1 до 1)
Проективное преобразование
vs. проекция
• Матрица проекции вырожденная
– Фактически, информация от координате z теряется
• Часто необходимо выполнять дополнительные действия уже
ПОСЛЕ проецирования
– Например, удаление невидимых линий/поверхностей
– Поэтому часто (e.g. в OpenGL) используется перспективное
преобразование вместо проекции
• Перспективное преобразование невырожденно и позволяет
анализировать глубину!
• Перспективное преобразование преобразует некоторую
область пространства в каноническую пирамиду
видимости
Отсечение
Преобразование в экранные
координаты
• Отбрасываем координату z
• Умножаем на высоту/ширину окна
– Получаем экранные координаты
Итоги
• Рассмотрены геометрические преобразования
–
–
–
–
–
Нелинейные преобразования
Линейные преобразования (проективные)
Аффинные преобразования
Преобразования подобия
Изометрические преобразования
• Однородные координаты
– Много применений: унификация операций с матрицами,
перспективное деление и т.п.
• Комбинация, иерархия преобразований
– Сборка модели из локальных компонент
• Графический конвейер: от локальной модели до
точки на экране
– Локальные, мировые, экранные координаты
Download