Трехмерная компьютерная графика
Рефераты >> Программирование и компьютеры >> Трехмерная компьютерная графика

(3.5)

где

if i =n then j = 1 else j = i + 1

а d вычисляется с помощью любой точки на плоскости.

Перед началом работы алгоритма удаления невидимых линий или поверхностей для получения желаемого вида сцены часто применя­ется трехмерное видовое преобразование. Матрицы тел для объек­тов преобразованной сцены можно получить или преобразованием исходных матриц тел или вычислением новых матриц тел, используя преобразованные вершины или точки.

Если [В] - матрица однородных координат, представляющая исходные вершины тела, а [Т] - матрица размером 4х4 видового преобразования, то преобразованные вершины таковы:

[ВТ]= [В][T] (3.6)

где [ВТ] - преобразованная матрица вершин. Использование уравнения (3.2) позволяет получить уравнения исходных плоскостей, ограничивающих тело:

[В][V]= [D] (3.7)

где [V] - матрица тела, а [D] в правой части - нулевая матрица. Аналогично уравнения преобразованных плоскостей задаются следующим образом:

[ВТ][VТ]= [D] (3.8)

где [VТ] - преобразованная матрица тела. Приравнивая левые части уравнения (3.7) и (3.8), получаем

[ВТ][VT] = [В][V]

Подставляя уравнение (3.6), сокращая на [В] и умножая слева на

[T]-1 имеем

[VT] = [T]-1[V]

Итак, преобразованная матрица тела получается умножением исходной матрицы тела слева на обратную матрицу видового преобразования.

Тот факт, что плоскости имеют бесконечную протяженность и что скалярное произведение точки на матрицу тела отрицательно, если точка лежит вне этого тела, позволяет предложить метод, в котором матрица тела используется для определения граней, которые экранируются самим этим телом. Отрицательное скалярное произведение даёт только такая пло­скость (столбец) в матрице тела, относительно которой точка ле­жит снаружи.

Если зритель находится в бесконечности на положительной полуоси z и смотрит на начало координат, то его взгляд направлен в сторону отрицательной полуоси z. В однородных координатах вектор такого направления равен:

Подпись: Рис. 3.9. Не лицевые плоскости
который служит, кроме того, образом точки, лежащей в бесконечности на отрицательной полуоси z. Фактически [Е] представляет любую точку, лежащую на плоскости z = - ¥, т. е. любую точку типа (x, y, - ¥). Поэтому, если скалярное произведение [Е] на столбец, соответствующий какой-нибудь плоскости в матрице тела, отрицательно, то [Е] лежит по отрицательную сторону этой пло­скости. Следовательно, эти плоскости невидимы из любой точки наблюдения, лежащей в плоскости z = ¥, а пробная точка на z = - ¥ экранируется самим телом, как показано на рис. 3.8. Та­кие плоскости называются не лицевыми, а соответствующие им грани задними. Следовательно,

[Е][V] < 0

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

Этот метод является простейшим алгоритмом удаления невидимых поверхностей для тел, представляющих собой одиночные вы­пуклые многогранники. Этот способ часто называют отбрасыванием зад­них плоскостей. Для выпуклых многогранников число граней при этом сокращается примерно наполовину. Метод эквивалентен вы­числению нормали к поверхности для каждого отдельного многоугольника. Отрицательность нормали к поверхности показывает, что нормаль направлена в сторону от наблюдателя и, Следовательно, данный многоугольник не виден.

Этот метод можно использовать также и для простой закраски. Интенсивность или цветовой оттенок многоугольника делается пропорциональным проекции нормали к поверхности на направление взгляда.

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

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

После определения нелицевых плоскостей остается найти нелицевые отрезки. Нелицевой отрезок образуется в результате пересечения пары нелицевых плоскостей. После первого этапа удаления нелицевых отрезков необходимо выяснить, существуют ли такие отрезки, которые экранируются другими телами на картинке или в сцене. Для этого каждый остав­шийся отрезок или ребро нужно сравнить с другими телами сцены или картинки. При этом использование приоритетной сортировки (z–сортировки) и простого минимаксного или габаритного с прямо­угольной объемлющей оболочкой тестов позволяет удалить целые группы или кластеры отрезков и тел. Например, если все тела в сцене упорядочены в некотором приоритетном списке, использую­щем значения z ближайших вершин для представления расстояния до наблюдателя, то никакое тело из этого списка, у которого бли­жайшая вершина находится дальше от наблюдателя, чем самая удаленная из концевых точек ребра, не может закрывать это ребро. Более того, ни одно из оставшихся тел, прямоугольная оболочка которого расположена полностью справа, слева, над или под реб­ром, не может экранировать это ребро. Использование этих прие­мов значительно сокращает число тел, с которыми нужно сравни­вать каждый отрезок или ребро.

Для сравнения отрезка P1P2 с телом удобно использовать параметрическое представление этого отрезка:

Р(t) = P1 + (Р2 - P1)t 0 £ t £ 1

v = s + dt

где v - вектор точки на отрезке, s - начальная точка, d - на­правление отрезка. Необходимо определить, будет ли отрезок неви­димым. Если он невидим, то надо найти те значения t, для кото­рых он невидим. Для этого формируется другой параметрический отрезок от точки Р(t) до точки наблюдения g:


Страница: