For all covered pixels
Compare z
В качестве предварительного шага там, где это целесообразно, применяется удаление нелицевых граней.
Если известно уравнение плоскости, несущей каждый многоугольник, то вычисление глубины каждого пиксела на сканирующей строке можно проделать пошаговым способом. Грань, при этом, рисуется последовательно строка за строкой. Для нахождения необходимых значений используется линейная интерполяция (рис 5.11).
Рис. 4.11 Сканирующая строка по грани
Для рисунка y меняется от y1 до y2 и далее до y3 при этом для каждой строке определяется xa, za, xb, zb.
x a = x 1 + (x 2 - x 1)×
x b = x 1 + (x 3 - x 1)×
z a = z 1 + (z 2 - z1)×
z b = z 1 + (z 3 - z1)×
На сканирующей строке x меняется от x a до x b и для каждой точки строки определяется глубина z:
z = z a + (z b - za)×
Реализация алгоритма вдоль сканирующей строки позволяет совместить алгоритм z – буфера с алгоритмами растровой развертки ребер и алгоритмами закраски грани.
Проиллюстрируем работу алгоритма на примере для рис. 5.12.
Рис. 4.12 Протыкающий треугольник
|
|
В начале в буфере кадра, и в z-буфере содержатся нули. После растровой развертки прямоугольника содержимое буфера кадра будет иметь вид:
Содержимое z-буфера таково:
|
|
При обработке треугольника преобразование его в растровую форму и сравнение по глубине дает новое значение буфера кадра:
Новое содержимое z-буфера таково:
|
|