При работе с графической системой OpenGL в прикладной программе нужно перед формированием любого нового изображения в явном виде подать команду инициализации z-буфера.

Объем дополнительных вычислений при использовании алгоритма z-буфера относительно невелик, поскольку в нем можно использовать предысторию обработки. Когда выполняется растровое преобразование многоугольника, то точки многоугольника обрабатываются последовательно, строка за строкой (об этом мы подробно поговорим в разделе 7.10). Многоугольник расположен на плоскости, которая описывается уравнением ах + by + cz + d = 0.

Пусть (jfi,^i,Z|) и (x2,y2,z2)- две точки внутренней области многоугольника, а следовательно, они принадлежат этой плоскости. Если обозначить

Ах = jfr-Jf|, АУ = У2~У\, Az = zz-'i. то уравнение плоскости можно записать в приращениях: а Ах + ЬАу + сАг = 0.

В этом уравнении фигурируют координаты видового окна, и, следовательно, для каждой строки растра значение у постоянно. Условие Ду = 0 выполняется до тех пор, пока обрабатывается текущая строка, а по мере перемещения по строке от одного пикселя к

6Если перед растровым преобразованием выполняется перспективная нормализация, то само понятие центра проецирования исчезает и вместо него появляется направление проецирования, так как все проецирующие лучи после такой нормализации становятся параллельными. Однако это преобразование никак не влияет на ачгоритм z-буфера, поскольку в этом ачгоритме вместо расстояния от центра проецирования можно использовать расстояние от произвольной плоскости, в частности от плоскости z = 0.

7В OpenGL для настройки режима работы системы в случае, если сравниваемые расстояния равны, используется функция glDepthFunc().

Удаление невидимых поверхностей

7.7. Удаление невидимых поверхностей другому наращивается только значение х, причем значение Ах также постоянно. Таким образом, при переходе от одного пикселя к другому на той же самой строке растра выполняется соотношение Дг = --Ах.

а Это значение нужно вычислить только один раз при обработке определенного многоугольника и далее использовать, пока обработка этого многоугольника не завершится.


⇐ Предыдущая| |Следующая ⇒