При работе с графической системой 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. Удаление невидимых поверхностей другому наращивается только значение х, причем значение Ах также постоянно. Таким образом, при переходе от одного пикселя к другому на той же самой строке растра выполняется соотношение Дг = --Ах.
а Это значение нужно вычислить только один раз при обработке определенного многоугольника и далее использовать, пока обработка этого многоугольника не завершится.