Математические основы компьютерной графики АФФИННЫЕ ПРЕОБРАЗОВАНИЯ НА ПЛОСКОТИ Определения Преобразование плоскости называется аффинным, если оно взаимно однозначно и образом любой прямой является прямая. Преобразование называется взаимно однозначным, если оно разные точки переводит в разные, и в каждую точку переходит какая-то точка. Такое преобразование задаётся формулами х' = ах + bу + р, y' = cx + dy + q с дополнительным требованием Преобразования координат M x, y M * x* , y * Точка на плоскости Переход к новой системе координат Преобразование объекта Преобразование координат Поворот и отражение x* a11 a12 x * y a a y 21 22 x * y x * a11 a12 y a a 22 21 x x cos y sin , x * x, y * x sin y cos . y * y. * T Перенос и растяжение x x, * y * y, 0 A 0 x x , y y . A? Однородные координаты x' y' z ' x x' x y' A y w' w y z AT x y w x / w y / w x1 x3 x, x2 y. x3 M x, y,1 M * x a, y b,1 x a 1 0 a x y b 0 1 b y 1 0 0 1 1 Матрицы преобразования в однородных координатах cos sin 0 sin cos 0 0 0 1 поворот 0 0 0 0 0 0 1 растяжение / сжатие 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 1 отражение перенос Матрицы преобразования в однородных координатах в трехмерном пространстве 0 1 0 cos 0 sin 0 0 0 sin cos 0 cos 0 sin 0 0 0 0 1 Поворот вокруг оси абсцисс cos sin 0 0 0 sin 1 0 0 cos 0 0 0 0 0 1 Поворот вокруг оси ординат sin cos 0 0 0 0 0 0 1 0 0 1 Поворот вокруг оси аппликат Задание • Определить матрицы растяжения, отражения, переноса. • Построить матрицу вращения на угол “фи” вокруг прямой L, проходящей через точку A(a, b, c) и имеющую направляющий вектор (l, m, n). Можно считать, что направляющий вектор прямой является единичным ПРОЕКТИРОВАНИЕ Основные виды проектирования • Для получения проекции объекта на картинную плоскость необнеобходимо провести через каждую его точку прямую из заданного проектирующего пучка (собственного или несобственного) и затем найти координаты точки пересечения этой прямой с плоскостью изображения. В случае центрального (перспективного) проектирования все прямые исходят из одной точки - центра собственного пучка. При параллельном проектировании центр (несобственного) пучка считается лежащим в бесконечности. Параллельное проектирование При повороте на угол psi относительно оси ординат, на угол phi вокруг оси абсцисс и последующего проектирования вдоль оси аппликат возникает матрица Центральное проектирование Предположим для простоты, что центр проектирования лежит на оси Z в точке С(0, 0, с) и плоскость проектирования совпадает с координатной плоскостью XY. Возьмем в пространстве произвольную точку М(х, у, z), проведем через нее и точку С прямую и запишем соответствующие параметрические уравнения. Полигональное представление объектов Объект задан набором вершин, которые объединены в плоские грани, чаще всего – треугольные. Для каждой вершины заданы: Координаты вершины Нормаль Координаты текстуры И много чего еще ... УДАЛЕНИЕ НЕВИДИМЫХ ЛИНИЙ И ПОВЕРХНОСТЕЙ Подходы • • • Для построения правильного изображения трехмерных объектов необходимо уметь определять, какие части объектов (ребра, грани) будут видны при заданном проектировании, а какие будут закрыты другими гранями объектов. В качестве возможных видов проектирования традиционно рассматриваются параллельное и центральное (перспективное) проектирования. Проектирование осуществляется на так называемую картинную плоскость (экран): проектирующий луч к картинной плоскости проводится через каждую точку объектов. При этом видимыми будут те точки, которые вдоль направления проектирования ближе всего расположены к картинной плоскости. Далее будем считать, что все объекты представлены набором выпуклых плоских граней, которые пересекаются только вдоль своих ребер. К решению задачи удаления невидимых линий и поверхностей можно выделить два основных подхода. – Первый подход заключается в определении для каждого пиксела того объекта, который вдоль направления проектирования является ближайшим к нему. При этом работа ведется в пространстве картинной плоскости и существенно используются растровые свойства дисплея. – Второй подход заключается в непосредственном сравнении объектов друг с другом для выяснения того, какие части каких объектов будут являться видимыми. В данном случае работа ведется в исходном пространстве объектов и никак не привязана к растровым характеристикам дисплея. Отсечение нелицевых граней Если грани являются границей тела (или нескольких тел), то для каждой из них можно определить вектор внешней нормали D A B C Нормали к граням А и В смотрят в сторону наблюдателя (наблюдатель находится в положительном полупространстве по отношению к плоскости, проходящей через соответствующую грань). Такие грани называются лицевыми (front-faced). Для граней C и D нормали направлены от наблюдателя, их называют нелицевыми (back-faced). Свойства (не)лицевых граней В случае, когда грани являются границей тела (или нескольких тел), то ни одна из нелицевых граней не может быть видна даже частично – любая из них всегда будет закрываться от наблюдателя лицевыми гранями. При определении видимости все нелицевые грани можно всегда отбрасывать, что сокращает число рассматриваемых граней примерно вдвое (в общем случае количество лицевых граней примерно равно количеству нелицевых, т.е. составляет половину от общего числа граней). Когда вся сцена состоит из одного выпуклого объекта, то все лицевые грани и только они будут видны, причем полностью. Удаление невидимых линий. Алгоритм Робертса Самым первым алгоритмом, предназначенным для удаления невидимых линий, был алгоритм Робертса, требующий, чтобы каждая грань была выпуклым многогранником: • Сначала отбрасываются все ребра, обе определяющие грани которых являются нелицевыми (ни одно из таких ребер не будет видно). • Следующим шагом является проверка каждого из оставшихся ребер со всеми гранями многогранника на закрывание. Возможны следующие случаи: • грань не закрывает ребро; • грань полностью закрывает ребро (и оно тогда удаляется из списка рассматриваемых ребер); • грань частично закрывает ребро (в этом случае ребро разбивается на несколько частей, из которых видимыми являются не более двух; само ребро удаляется из списка, но в этот список проверенных ребер добавляются те его части, которые не закрываются данной гранью). Если общее количество граней равно n, то временные затраты для данного алгоритма составляют O(n2). Удаление невидимых граней. Метод Z-буфера • Сопоставим каждому пикселу (х, у) картинной плоскости, кроме цвета, хранящегося в видеопамяти, его расстояние до картинной плоскости вдоль направления проектирования z(x, у) (его глубину). Изначально массив глубин инициализируется «плюс бесконечность». • Для вывода на картинную плоскость произвольной грани она переводится в свое растровое представление на картинной плоскости и для каждого пиксела этой грани находится его глубина. В случае, если эта глубина меньше значения глубины, хранящегося в z-буфере, пиксел рисуется и его глубина заносится в z-буфер. Метод двоичного разбиения пространства • • • Рассмотрим некоторую плоскость в объектном пространстве. Она разбивает множество всех граней на два непересекающихся множества (кластера), в зависимости от того, в каком полупространстве относительно плоскости эти грани лежат (будем считать, что плоскость не пересекает ни одну из этих граней). При этом очевидно, что ни одна из граней, лежащих в полупространстве, не содержащем наблюдателя, не может закрывать собой ни одну из граней, лежащих в том же полупространстве, что и наблюдатель. Тем самым сначала необходимо вывести грани из дальнего кластера, а затем из ближнего Применим подобную технику для упорядочения граней внутри каждого кластера. Для этого для построим разбиение граней каждого кластера на два множества очередной плоскостью; а затем для вновь полученных граней повторим процесс разбиения, и будем поступать так, до тех пор, пока в каждом получившемся кластере останется не более одной грани. Трассировка лучей При использовании метода трассировки лучей через каждый пиксел картинной плоскости выпускается луч (из положения наблюдателя) в сцену. Далее находится ближайшее пересечение этого луча с объектами сцены – оно и определяет, что именно будет видно в данном пикселе.