Аффинные преобразования Графический конвейер Астана. Лекция 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 • Умножаем на высоту/ширину окна – Получаем экранные координаты Итоги • Рассмотрены геометрические преобразования – – – – – Нелинейные преобразования Линейные преобразования (проективные) Аффинные преобразования Преобразования подобия Изометрические преобразования • Однородные координаты – Много применений: унификация операций с матрицами, перспективное деление и т.п. • Комбинация, иерархия преобразований – Сборка модели из локальных компонент • Графический конвейер: от локальной модели до точки на экране – Локальные, мировые, экранные координаты