Алгоритм, использующий Z буфер.
Алгоритм работает в пространстве изображения.
Буфер кадра (регенерации) используется для заполнения атрибутов (интенсивности) каждого пикселя в пространстве изображения.
Для него требуется буфер регенерации, в котором запоминаются значения яркости, а также Z-буфер (буфер глубины), куда можно помещать информацию о координате z для каждого пикселя. Вначале в Z-буфер заносятся максимально возможные значения z, а буфер регенерации заполняется значениями пикселя, описывающими фон. Затем каждый многоугольник преобразуется в растровую форму и записывается в буфер регенерации, при этом, однако, не производится начального упорядочения.
Достоинства
- Простота. Сцены могут быть любой сложности
- Элементы сцены не нужно сортировать
Недостатки
- Большой объём памяти
- Трудоёмкость устранения лестничного эффекта
- Трудоёмкость реализации эффектов прозрачности
Алгоритм
- Заполнение буфера кадра фоновый значением интенсивности (цвета).
- Заполнение Z - буфера минимальным значением Z .
- Преобразование каждого многоугольника в растровую форму в произвольном порядке.
- Вычисление для каждого пикселя с координатами (x, y), принадлежащего многоугольнику, его глубины Z(x, y).
- Сравнение глубины Z(x, y) со значением Zбуф(x, y), хранящимся в Z-буфере для пикселя теми же координатами(x, y). Если Z(x, y)>Zбуф(x, y), то записать атрибут очередного многоугольника в буфер кадра и Zбуф(x, y) заменить на значение Z(x, y).
Замечание
Алгоритм, использующий Z -буфер, можно применять для построения разрезов поверхностей. В этом случае изменяется только операция сравнения глубины пикселя со значением, занесенным в буфер: [Z(x, y) > Zбуф (x, y)] и (Z(x, y <= Zразр), где Zразр - глубина искомого разреза.
|
|
Алгоритм, использующий список приоритетов (алгоритм Художника)
В основе алгоритма способ изображения сцены от дальних объектов к ближним.
Алгоритм
- Отсортировать многоугольники сцен в кадре в порядке возрастания Z
- Построить самый дальний многоугольник, если он не экранирует другие другие многоугольники (Zmax(A)<Zmin(B))
- Проверить, экранирует ли многоугольник P многоугольник Q при Zmax(P)>Zmin(Q). Если на один из тестов даётся + ответ, P заносится в буфер кадра (P не экранирует Q). Если все -, то P и Q меняются местами, позиция Q помечается, тесты повторяются снова. Если вновь попытка менять местами, то P разрезается плоскостью, несущей Q, исходный многоугольник удаляется из списка, а его части заносятся в список. Тесты повторяются снова.
- верно ли, что прямоугольные объемлющие оболочки P и Q не перекрываются по X? по Y?
- верно ли, что P целиком лежит по ту сторону плоскости, несущей Q, которая расположена дальше от точки наблюдения
- верно ли, что Q целиком лежит по ту сторону плоскости, несущей P, которая расположена ближе к точке наблюдения
- верно ли, что проекции P и Q не перекрываются
Для 3,4 можно проверять функцией f=Ax+By+Cz+D, где A, B, C – коэффициенты пробной плоскости U. В f подставляются координаты вершин испытуемого многоугольника W. Если знаки f для вершин совпадают и + или =0, то W находится с дальней стороны от плоскости U. Если знаки совпадают и отрицательны или равны 0, то W расположен с ближней стороны от U.
|
|
Алгоритм построчного сканирования, использующий Z буфер. Интервальные методы построчного сканирования (основные предпосылки).
Алгоритмы Варнока, Z-буфера и строящего список приоритетов обрабатывают элементы сцены в порядке, который не связан с процессом визуализации. Алгоритмы построчного сканирования обрабатывают сцену в порядке прохождения сканирующей строки.
Алгоритм
- Подготовка информации
a) Для каждого многоугольника определить самую верхнюю сканирующую строку, которую он пересекает.
b) Занести многоугольник в группу y, соответствующую этой сканирующей строке
c) Запомнить для каждого многоугольника: Δy – число строк, пересекающих этот многоугольник, список рёбер многоугольника, коэффициенты A, B, C, D уравнения плоскости многоугольника, визуальные атрибуты многоугольника - Решение задачи удаления невидимых поверхностей
a) Инициализировать буфер кадра дисплея
b) Для каждой сканирующей строки
- Инициализировать буфер кадра размером с одну сканирующую строку, заполнив его фоновым изображением
- Инициализировать Z-буфер размером с одну сканирующую строку значением Zmin
- Проверить необходимость добавления в список активных многоугольников (САМ)
новых многоугольников - Если было добавление многоугольника в САМ, то добавить в САР соответствующие рёбра новых многоугольников
- Если произведено удаление какого-либо элемента из пары рёбер САР, то проверить необходимость удаления всего многоугольника из САМ. Если он остаётся, то проверить необходимость удаления другого ребра из этой пары – если его удалять не нужно, то доукомлектовать пару (добавив недостающее левое или правое ребро)
c) В САР должна храниться следующая информация:
1) Xл – пересечение левого ребра с текущей сканирующей строкой
2) ΔXл – приращение Xл в интервале между соседними сканирующими строками
3) ΔYл – число сканирующих строк, пересекаемых левым ребром
4) Xп, ΔXп, ΔYп
5) ΔZх=-A/C для C≠0 (иначе ΔZх=0) – приращение по Z вдоль сканирующей строке
6) ΔZy=-B/C для C≠0 (иначе ΔZy=0) – приращение по Z в интервале между соседними сканирующими строками
d) Для каждой пары ребёр многоугольника из САР выполнить:
1) Извлечь
2) Инициализировать Z значением Zл
3) Для каждого пикселя Xл≤X≤Xп вычислить Z(x,y=const). Z1=Zл, ..., Zk=Zk-1+ ΔZх
4) Если Z()>Zбуф(), то Zбуф=Z и занести атрибуты многоугольника в буфер кадра
e) Записать буфер кадра сканирующей строки в буфер кадра дисплея
f) Скорректировать САР
1) ΔYл--, ΔYп--
2) Xл=Xл+ΔXл, Xп=Xп+ΔXп
3) Zл=Zл+ΔZхΔX+ΔZy
4) Если ΔYл<0 или ΔYп<0, то удалить соответствующее ребро из списка, пометив положение обоих рёбер в списке и породивший их многоугольник
g) Скорректировать САМ
1) ΔY--
2) Если ΔY<0, то удалить многоугольник из САМ
Интервальные методы построчного сканирования
В алгоритме построчного сканирования с использованием Z-буфера глубина многоугольника вычисляется для каждого пикселя на сканирующей строке. Количество вычислений можно сократить, если использовать понятие интервалов. Решение задачи удаления невидимых поверхностей сводится к выбору видимых отрезков в каждом интервале, полученном путём деления сканирующей строки проекциями точек пересечения ребёр
|
|
|
|
- Изобразить фон
- Изобразить атрибуты многоугольника, соответствующие этому отрезку
- Изобразить атрибуты многоугольника, соответствующие отрезку с MAX Z
- sign (z1m-z2m)≠ sign (z1k-z2k) – разбить интервал точкой пересечения
36. Алгоритм определения видимых поверхностей путем трассировки лучей.
Дата добавления: 2019-01-14; просмотров: 388; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!