Настройка конвейера Перед выводом примитивов необходимо настроить графический конвейер, указать, какие функции и как должны выполняться в процессе преобразования геометрической модели в изображение на экране. Так, при помощи функции gl ShadeModel ( ) в первом примере задавался способ заливки областей.
Чтобы включить тот или иной этап обработки в конвейер, в библиотеке предусмотрена функция gl Enabl е( ). Выключение этапа выполняется вызовом gl Di sabl е( ). Например, функцией gl Enabl e(GL_CULL_FACE) в конвейер включают операцию отбрасывания невидимой стороны грани, а функцией glDisable(GL_CULL_FACE) она исключается из конвейера. Передавая функциям gl Enabl е( ) и gl Di sabl е( ) различные константы, можно включать и выключать выполнение до 50 различных операций. Так, константа GL_DEPTH_TEST управляет включением теста глубины для удаления невидимых точек, GL_BLEND позволяет включить полупрозрачность граней, GL_F0G задает имитацию тумана, GL_LIGHTING отвечает за расчет освещения и т. д.
Отдельной функцией glPolygonMode(GLenum face, GLenum mode) можно предварительно указать вид грани для каждой ее стороны. Грань может полностью закрашиваться или могут быть нарисованы только ее ребра или только вершины. Например, вызов gl Ро 1 ygonMode ( GL_FR0NT. GL_F ILL) задает сплошную заливку лицевых граней, которая задана по умолчанию. Данную функцию часто используют для получения быстрого представления о форме объекта при помощи вывода его каркасной модели.
Удаление тыльных граней Напомним, что грань, заданная в пространстве, имеет тыльную и лицевую стороны. Нормали в вершинах геометрической модели ради достижения оригинального эффекта при освещении могут быть направлены произвольным образом, поэтому они не используются для определения лицевой стороны. Библиотека должна вычислять нормаль к плоскости грани по координатам ее вершин или использовать согласованный с этой нормалью порядок обхода, когда обход вершин лицевой грани выполняется против часовой стрелки. Перед выводом примитива функцией glCullFace(GLenum mode) можно указать, какая из сторон исключается из процесса вывода изображения. Так, если применяется значение GL_BACK, то исключаются тыльные стороны граней. Значение GLFR0NT позволяет исключить из об-