Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpory_3D-mod.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
10.94 Mб
Скачать

12.3. Алгоритм, использующий z-буфер (пи)

Алгоритм, использующий z-буфер, относится к алгоритмам, работающим в пространстве изображения.

Основной принцип алгоритма – используются два буфера: регенерации, в котором хранятся значения пикселов, и Z-буфер, который хранит z-координаты.

Буфер регенерации заполняется значениями при параллельном анализе z-координаты со значениями z-буфера.

Шаги алгоритма:

  1. В Z-буфер заносятся максимально возможные значения z;

  2. Буфер регенерации заполняется значениями фона;

  3. Каждый объект раскладывается в растр; если координата z точки меньше либо равна значению Z-буфера в элементе , то:

  1. заносится в элемент Z-буфера;

  2. значение пиксела помещается в элемент буфера регенерации.

Достоинства ми данного алгоритма являются простота реализации и отсутствие сортировки.

Недостатками данного алгоритма являются:

нужен большой объем памяти для хранения Z-буфера. Информация о значении пиксела занимает 24 бита, информация о глубине – около 20 бит;

большая стоимость устранения лестничного эффекта.

Расчет координаты z производится из уравнения плоскости:

, .

Если в точке , то в точке ,

где , если же , то

Пример работы алгоритма приведен на рисунке 12.3. В буфере регенерации (БР) хранятся номера цветов, в примере вместо них для упрощения понимания стоят буквы. (б – белый, к – красный, с – синий, з – зеленый). Вначале в Z-буфере хранится максимальное z, равное 5, в в БР – белый цвет. Потом происходит последовательное разложение в растр объектов, начиная с красного.

Z – буфер

I

БР

Z – буфер

II

БР

Z – буфер

III

БР

Z – буфер

IV

БР

Рис. 12.3 Реализация алгоритма, использующего Z-буфер

12.4. Алгоритм построчного сканирования (пи)

Алгоритм построчного сканирования относится к алгоритмам, работающим в пространстве изображения.

Алгоритм является расширением алгоритма преобразования многоугольника в растровую форму; разница в том, что работа происходит не с одним многоугольником, а со всеми сразу.

Шаги алгортма:

  1. Создается таблица ребер (ТР). Она содержит все ребра многоугольников, отсортированные по меньшей y-координате.

Описание ребра содержит:

Указатель на многоугольник

  1. Создается таблица многоугольников (ТМ).

Описание многоугольников содержит:

Коэффициенты уравнения плоскости (A, B, C, D)

Цвет

Флаг =

0 — вне многоугольника

1 — внутри многоугольника

  1. Создается таблица активных ребер (ТАР).

Содержит все активные ребра на текущей сканирующей строке. Ребра упорядочены по возрастанию x-координаты.

Указание на многоугольник

Пример работы алгоритма показан на рис. 12.4. Имеются два треугольника. Сконирующая строка пересекает четыре ребра.

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

Для отрезка

Флаг 1 = 1

Флаг 2 = 0, цвет = цвету 1

флаг 1 = 1, флаг 2 = 0, извлекаем цвет 1.

Рис. 12.4 Пример работы алгоритма

Для отрезка

Флаг 2 = 0

Флаг 1 = 0, цвет = фон

Для отрезка

Флаг 2 = 1,

Флаг 1 = 0; цвет = цвету 2

Для отрезка

Флаг 2 = 0,

Флаг 1 = 0; цвет = фон

Строка — четыре пересекаемых ребра в ТАР.

Для отрезка

Флаг 1 = 1,

Флаг 2 = 0; цвет = цвет1

Для отрезка

Флаг 1 = 1,

Флаг 2 = 1, вычисляются z1 и z2 из уравнений плоскости, цвет = цвет 2

Для отрезка

Флаг 1 = 0,

Флаг 2 = 1, цвет = цвет2

Для отрезка

Флаг 1 = 0,

Флаг 2 = 0; цвет = фон

Алгоритм немного усложняется, если многоугольники проникают друг в друга. Тогда находят линию пересечения, и многоугольник разбивается на несколько многоугольников (рис. 12.5).

Рис. 12.5 Пример расположения многоугольников с проникновением

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]