if(depth < d[x][y]) // F is closest so far // F пока ближайшая грань
{
с - color of F at (x. y): II цвет грани F в точке (x. у)
set the pixel color at (x. y) to с II устанавливаем цвет пиксела в точке (х. у) равным с
d[x][y] = depth: // update the depth buffer // обновляем буфер глубины }
}
Вдобавок к своей простоте алгоритм буфера глубины обладает еще некоторыми приятными свойствами.
О Грани из списка faces[] могут быть нарисованы в произвольном порядке, то есть никакой предварительной сортировки этого списка не требуется. В отличие от большинства других HSR-методов, которые зависят от той или иной сортировки, в данном алгоритме нигде не производится никакой явной сортировки - только поиск ближайшей грани в каждом пикселе.
Удаление невидимых поверхностей
О Алгоритм удачно использует связность глубин (depth coherence), то есть тенденцию глубины грани в одном пикселе находиться близко к глубинам в соседних пикселах, что упрощает вычисления: глубины вдоль строки развертки вычисляются инкрементно, как уже описывалось в главе 8. Так как каждая грань рисуется отдельно, в порядке, определяемом строкой развертки, в рассматриваемом алгоритме можно также использовать связность грани (face coherence) - склонность некоторых свойств (таких, как интенсивность света и направление нормального вектора) к медленным и предсказуемым изменениям вдоль грани.
О Хотя здесь мы в основном рассматриваем визуализацию полигональных сеток, метод буфера глубины так же хорошо работает при визуализации других классов объектов, таких как лоскуты Кунса или квадратичные поверхности. В этом методе требуется только, чтобы глубину поверхности в каждой точке (х, у) можно было найти, чтобы сравнить со значением d[][].
О Если буфер глубины записывается в файл вместе с изображением, то этот файл можно будет использовать впоследствии для добавления к сцене новых объектов. Каждый новый объект визуализируется с использованием наиболее подходящей технологии, и его пикселы рисуются или не рисуются в зависимости от глубины этого объекта в различных пикселах.