-
Notifications
You must be signed in to change notification settings - Fork 0
33.Алгоритм, использующий Z буфер.
-
В пространстве изображений.
-
Сцены могут быть произвольной сложности, а поскольку размеры изображения ограничены размером экрана дисплея, то трудоемкость алгоритма зависит линейно от числа рассматриваемых поверхностей.
-
Элементы сцены заносятся в буфер кадра в произвольном порядке, поэтому в данном алгоритме не тратится время на выполнение сортировок, необходимых в других алгоритмах.
-
Недостаток: большой объем требуемой памяти и еще:
- По курову:
К недостаткам алгоритма следует отнести довольно большие объёмы памяти, а также трудоемкость устранения лестничного эффекта и трудность реализации эффектов прозрачности.
Буфер кадра (регенерации) - используется для заполнения атрибутов (интенсивности) каждого пикселя в пространстве изображения. Для него требуется буфер регенерации, в котором запоминаются значения яркости, а также Z-буфер (буфер глубины), куда можно помещать информацию о координате z для каждого пикселя.
-
Вначале в Z-буфер заносятся максимально возможные значения z, а буфер регенерации заполняется значениями пикселя, описывающими фон. Затем каждый многоугольник преобразуется в растровую форму и записывается в буфер регенерации, при этом, однако, не производится начального упорядочения.
-
В процессе работы глубина (значение координаты Z) каждого нового пикселя, который надо занести в буфер кадра, сравнивается с глубиной того пикселя, который уже занесён в Z-буфер. Если это сравнение показывает, что новый пиксель расположен ближе к наблюдателю, чем пиксель, уже находящийся в буфере кадра, то новый пиксель заносится в буфер кадра. Кроме того, производится корректировка Z-буфера: в него заносится глубина нового пикселя. Если же глубина (значение координаты Z) нового пикселя меньше глубины хранящегося в буфере, то никаких действий производить не надо. В сущности алгоритм для каждой точки (x, y) ищет наибольшее значение функции Z(x,y).
- Вычисление глубины:
Уравнение плоскости: Ax+By+Cz+D=0. Для прямоугольника Z=-(Ax+By+D)/C, С!=0. Если С==0, то прямоугольник расположен параллельно вектору взгляда – отрисовывать нужно линию или вершину. Используется уравнение ребра; (z-z1)/(z2-z1)=(y-y1)/(y2-y1), если координаты не равны. Если же равны, ребро горизонтально, отрисовывается точка.
При y2 != y1
z=z1 + (y-y1)/(y2 - y1)*(z2-z1)
При y2 == y1
z = max(z2, z1)
- Уравнение прямой, проходящей через две точки в пространстве: