Алгоритм с использованием z-буфера

Рассмотрим алгоритм удаления невидимых граней с использованием z-буфера, который является одним из наиболее часто используемых в современных приложениях компьютерной графики. Впервые он был предложен Кэтмулом. Он работает в пространстве изображения и применяется в таких популярных графических библиотеках, как OpenGL и Direct3D.

Алгоритм работает в параллельной проекции. Пусть размеры окна вывода или экрана составляют X точек в ширину и Y точек в высоту. В качестве z-буфера заведем двумерный прямоугольный массив чисел по размерности совпадающий с окном вывода или экрана, т.е. X x Y. В z-буфере будут храниться текущие значения z-координат каждого пиксела.

В начале работы алгоритма в z-буфер заносятся значения, соответствующие бесконечности. Каждая грань трехмерного объекта, представленная в виде многоугольника, преобразуется в растровую форму. При разложении в растр для каждой точки многоугольника вычисляется значение ее z-координаты. Если z-координата оказалась меньше, чем текущее значение в z-буфере, то в z-буфер заносится z-координата точки, и на экране рисуется точка цветом текущего многоугольника. После разложения в растр всех многоугольников изображение трехмерной сцены построено.

Рассмотрим способ ускоренного вычисления z-координат при разложении многоугольников в растр. Запишем уравнение плоскости, образуемой многоугольником в пространстве: Ax + By + Cz = 0.

Выразим z-координату точки: . Пусть . Найдем z-координату для соседней точки . Для соседнего пиксела на экране , тогда , отсюда следует, что . Таким образом, вычисление z-координаты соседнего пиксела сводится к одной операции вычитания.

Алгоритм Ньюэла − Ньюэла − Санча

Рассмотрим далее алгоритм удаления невидимых граней методом сортировки по глубине (авторы: Ньюэлл, Ньюэлл, Санча). Часть этого метода работает в пространстве объекта, а часть в пространстве изображения. Он также работает для параллельной проекции, то есть с учетом того, что произведено перспективное преобразование. Введем определение пространственной оболочки.

Пространственной оболочкой трехмерного объекта называется минимальный прямоугольный параллелепипед, целиком содержащий внутри себя данный объект. Аналогично можно определить двумерную и одномерную пространственные оболочки.

Метод состоит из трех основных шагов:

1. Упорядочение всех многоугольников в соответствии с их наибольшими z-координатами.

2. Разрешение всех неопределенностей, которые возникают при перекрытии z-оболочек многоугольников.

3. Преобразование каждого из многоугольников в растровую форму, производимое в порядке уменьшения их наибольшей z-координаты.

Ближайшие многоугольники преобразуются в растровую форму последними и закрывают более отдаленные многоугольники, так как изображаются поверх предыдущих.