glNewList ( 1, GL_COMPILE ); glColor3fv ( color ) ; glEndList ( ) ;
color [2] = 1.0;
Работа с z-буфером Как уже было сказано, OpenGL поддерживает использование аппаратного z-буфера для удаления невидимых поверхностей. Для того чтобы использовать эту поддержку, необходимо разрешить использование теста глубины при помощи следующей команды:
glEnable ( GL_DEPTH_TEST ) ;
Выключить эту проверку можно командой glDisable ( GL_DEPTH_TEST ); Существует возможность задания того, как OpenGL будет определять, что тест глубины выполнен. Для этого служит следующая функция:
void glDepthFunc ( GLEnum func );
Значения параметра func задаются табл. 4.3.
Таблица 4.3
Значение |
Условие выполнения текста |
GL.NEVER |
Никогда не выполнен |
GL_LESS |
Если поступающее значение глубины меньше значения, хранящегося в буфере глубины |
GL.EQUAL |
Если поступающее значение глубины совпадает со значением, хранящимся в буфере глубины |
GL_LEQUAL |
Если поступающее значение глубины меньше или равно значению, хранящемуся в буфере глубины |
GL.GREATER |
Если поступающее значение глубины больше значения, хранящегося в буфере глубины |
GL_NOTEQUAL |
Если поступающее значение глубины не равно значению, хранящемуся в буфере глубины |
GL.GEQUAL |
Если поступающее значение глубины больше или равно значению, хранящемуся в буфере глубины |
GL_ALWAYS |
Всегда |
Задание моделей закрашивания Линия или заполненная грань может быть нарисована одним цветом (плоское закрашивание, GL_FLAT) или путем интерполяции цветов в вершинах (закрашивание Гуро, GL_SMOOTH). В последнем случае значения цвета для пикселов интерполируются между заданными значениями.
Для задания режима закрашивания служит процедура
void glShadeModel ( GLenum mode );
где параметр mode принимает одно из значений GL_FLAT или GL_SMOOTH.
Основы библиотеки OpenGL
Освещение
OpenGL использует модель освещенности, в которой свет приходит из нескольких источников, которые по отдельности могут быть включены или выключены. Кроме того, существует еще общее фоновое (ambient) освещение. Для правильного освещения объектов необходимо для каждой грани задать материал, обладающий определенными свойствами. Материал может испускать свой собственный свет, рассеивать падающий свет во всех направлениях (диффузное отражение) или отражать свет в определенных направлениях подобно зеркалу.