Если теперь при очистке буфера заполнить его значением -1.0, то будет выведено изображение, показанное на рис. 22.1 справа. Восстановить режим, заданный по умолчанию, можно при помощи вызова функции glDepthFunc(GL_LESS). Полный набор возможных значений аргумента функции glDepthFuncC ) легко найти в справочной системе среды Visual Studio. Иногда для достижения специальных эффектов после вывода части изображения в конвейере оставляют включенным тест глубины, но при помощи функции gl DepthMask ( 1 ) запрещают дальнейшее изменение Z-буфера вновь выводимыми примитивами. Возвратить исходную настройку можно вызовом glDepthMask(O).
В листинге 22.12 приведен код функции RenderZBufC ), отличающейся от рассмотренной ранее RenderO( ) включением теста глубины и контроля тыльных граней. Оператором gl ShadeModel (GL__SM00TH ) в ней явно включена градиентная заливка треугольников (правда, именно такой режим задан по умолчанию).
Инициализация библиотек и вывод примитивов
Листинг 22.12
void RenderZBufCHWND hWnd) {
RECT R:
GetClientRect(hWnd.&R): glViewportCO.O.R.right.R.bottom);
glShadeModel (GL_SM00TH); //Дублируем установку по умолчанию. glCul1Face(GL_BACK): //GL_BACK - отбрасывать тыльные грани. glEnable(GL_CULL_FACE); //Включаем контроль тыльных граней. glClearColor(l.Of.l.Of.l.Of.l.Of):
glClearDepth(l.O); //Указываем значение, которым заполняются ячейки Z-буфера
glClearC GL__C0L0R_BU F F ER_BIT|GL_DE PTH_BU F F ER_BIT ): //При вызове функции
//glClearO задаем флагами очистку буфера цвета и Z-буфера
glEnable(GL_DEPTH_TEST); //Включаем тест глубины.
glBegin(GL_TRIANGLES);
glColor4d (0.0. 1.0. 0.0. 0.4);
glVertex3d(0.25.0.0. 0.0); //Вершина VI.
glColor4d (1.0. 0.0. 0.0. 0.4);
glVertex3d(0.8. 0.2. 0.0);
glColor4d (0.0. 0.0. 1.0. 0.4);
glVertex3d(0.5. 1.0.0.0);
glColor4d ( 0.0. 1.0. 0.0. 0.3);
glVertex4d(-l. 3. -8.0. 10.0):
glVertex4d( 9.5. 7. 6.0. 10.0);
glVertex4d( -1. 7. -8.0. 10.0): 0): //Вершина V6.
glEndO;
glDi sable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST): SwapBuffers(wglGetCurrentDCO) ; }