Skip to content

33.Алгоритм, использующий Z буфер.

Alice edited this page Jun 14, 2020 · 11 revisions

Алгоритм, использующий 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)

  • Уравнение прямой, проходящей через две точки в пространстве:

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

Clone this wiki locally