OpenGL содержит внутри себя несколько различных буферов. Среди них фрейм буфер (где строится изображение), z-буфер, служащий для удаления невидимых поверхностей, буфер трафарета и аккумулирующий буфер.
Для очистки внутренних буферов служит процедура glClear(GLbitfield mask), очищающая буферы, заданные переменной mask. Параметр mask является комбинацией следующих констант:
GL_COLOR_BUFFER_BIT – очистить буфер изображения (фреймбуфер);
GL_DEPTH_BUFFER_BIT – очистить z-буфер;
GL_ACCUM_BUFFER_BIT – очистить аккумулирующий буфер;
GL_STENCIL_BUFFER_BIT – очистить буфер трафарета.
Цвет, которым очищается буфер изображения, задаётся процедурой glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha). Значение, записываемое в z-буфер при очистке задаётся процедурой glClearDepth(GLfloat depth). Значение, записываемое в буфер трафарета при очистке задаётся процедурой glClearStencil(GLint s). Цвет, записываемый в аккумулирующий буфер при очистке задаётся процедурой glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha).
Сама команда glClear очищает одновременно все заданные буферы, заполняя их соответствующими значениями.
|
|
Для задания цвета объекта служат процедура:
glColor{3 4}{b s i f d ub us ui}[v](TYPE red, …).
Цифра 3 или 4 указывает на количество требуемых аргументов, а буква, следующая за цифрой, показывает тип аргументов. Например, в процедуру glColor3i будут переданы три параметра целого типа.
Если - значение параметра не задано, то оно автоматически полагается равным единице. Версии процедуры glColor, где параметры являются переменными с плавающей точкой, автоматически обрезают переданные значения в отрезок [0, 1].
Процедура glFlush() вызывает немедленное рисование ранее переданных команд. При этом ожидания завершения всех ранее переданных команд не происходит. С другой стороны, команда glFinish() ожидает, пока не будут завершены все ранее переданные команды.
Если нужно включить удаление невидимых поверхностей методом z-буфера, то z-буфер необходимо очистить и передать команду glEnable(GL_DEPTH_TEST). Команду glEnable() можно выполнить только один раз при инициализации системных переменных OpenGL. Очистку z-буфера необходимо производить перед началом построения очередного кадра изображения.