Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по компьютерной графике [по вопросам].doc
Скачиваний:
84
Добавлен:
02.05.2014
Размер:
783.36 Кб
Скачать

Вопрос 36

Удаление скрытых линий и поверхностей: алгоритм удаления поверхностей с Z-буфером, построчный Z-буфер, иерархический Z-буфер, Z-пирамида.

Обычный буфер кадра хранит коды цвета для каждого пикселя в пространстве изображения. Идея данного ал­горитма заключается в том, что величина z по соответствующей оси является показателем того, какая грань сцены находится ближе, а ка­кая дальше. Следовательно, для каждого пикселя дополнительно хра­нится еще и координата z (или глубина). При занесении очередного пикселя в буфер кадра значение его z-координаты сравнивается с z-координатой пикселя, который уже находится в буфере. Если у ново­го пикселя она больше, чем у старого, т.е. он ближе к наблюдателю, то атрибуты нового пикселя и его z-координата заносятся в буфер, если нет, то ничего не делается.

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

Общая схема такого алгоритма следующая:

1. Подготовка данных. Для каждого многоугольника определить максимальную Y-координату. Занести многоугольник в груп­пу многоугольников, соответствующую данной Y-координате.

2. Совбстенно заливка.

Иерархический z-буфер

Опишем куб вокруг всей сцены. Разобьем его на 8 равных частей.

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

Для облегчения проверки грани на скрытость можно использо­вать z-пирамиду. Ее нижним уровнем является сам z-буфер. Для по­строения следующего уровня пиксели объединяются в группы по 4 (22×) и из их глубин выбирается наибольшая. Таким образом, сле­дующий уровень оказывается тоже буфером, но его размер уже будет меньше исходного в 2 раза по каждому измерению. Аналогично стро­ятся и остальные уровни z-пирамиды до тех пор, пока не будет дос­тигнут уровень, состоящий из единственного пикселя, являющегося вершиной z-пирамиды.

Если минимальная глубина грани оказывается больше, то грань скрыта. В противном случае грань разбивается на 4 части и сравнение произво­дится на следующем уровне пирамиды. Если ни на одном из проме­жуточных уровней скрытость грани установить не удалось, то осуще­ствляется переход к последнему уровню, на котором грань растеризу­ется, и производится попиксельное сравнение с z-буфером.