ФУНКЦИИ ОТБОРА МНОГОУГОЛЬНИКОВ OpenGL
Удаление задних граней выполняется с помощью функции
glEnable (GL_CULL_FACE); glCullFace (mode); Здесь параметру mode присваивается значение GL_BACK. Фактически данную функцию можно использовать и для удаления передних граней, более того, можно убрать и передние, и задние грани. Если точка наблюдения находится, например, внутри здания, то будут наблюдаться только задние стороны объекта (внутренние части комнаты). В этом случае можно либо присвоить параметру mode значение GL_FRONT, либо изменить определение передних многоугольников, используя функцию gl Front-Face, рассмотренную в разделе 4.14. Затем, если точка наблюдения перемещается из здания, можно убрать с изображения задние грани. Кроме того, в некоторых приложениях может потребоваться отобразить на сцене только такие определенные примитивы, как наборы точек и отдельные отрезки. Таким образом, чтобы удалить все многоугольные поверхности со сцены, параметру mode присваивается значение GL FRONT AND BACK.
По умолчанию параметр mode в функции glCullFace имеет значение GL_BACK. Следовательно, если активизировать функцию glEnable без явного вызова функции glCullFace, со сцены будут удалены задние грани. Процедура отбора выключается командой
glDisable (GL_CULL_FACE); ФУНКЦИИ БУФЕРА ГЛУБИНЫ OpenGL
Чтобы использовать процедуры OpenGL исследования видимых поверхностей с помощью буфера глубины, вначале необходимо модифицировать функцию инициализации GLUT для режима отображения, чтобы она включала запрос к буферу глубины и буферу регенерации. Это можно сделать, например, с помощью оператора glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); Затем значения буфера глубины инициализируется с помощью функции
glClear (GL_DEPTH_BUFFER_BIT); Обычно буфер глубины инициализируется с помощью того же оператора, который инициализирует буфер регенерации с цветом фона. При этом буфер глубины нужно очищать всякий раз, когда требуется отобразить на экране новый кадр. Отметим, что в OpenGL значения глубины нормируются в диапазон 0-1, так что предыдущая инициализация по умолчанию устанавливает все значения на максимум (1).
Процедуры OpenGL исследования видимых поверхностей с помощью буфера глубины активизируются следующей функцией:
glEnable (GL_DEPTH_TEST); Для деактивизации процедур буфера глубины используется функция
glDisable (GL_DEPTH_TEST); Проверку видимости с помощью буфера глубины можно также выполнить с другими исходными значениями максимальной глубины, которые выбираются с помощью функции OpenGL
glClearDepth (maxDepth); Параметру maxDepth можно присвоить любое значение между 0 и 1. Чтобы загрузить его в буфер глубины, нужно вызвать функцию glClear (GL_DEPTH_BUFFER_BIT). В противном случае буфер глубины инициализируется со значением по умолчанию (1.0). Поскольку расчет цвета поверхности и другая обработка не выполняются для объектов, находящихся за заданной максимальной глубиной, данная функция может использоваться для ускорения процедур буфера глубины, когда сцена содержит много отдаленных объектов, расположенных позади объектов переднего плана.