Назад | Оглавление | Домой | Далее

7.3.        Рисование геометрических объектов

7.3.1.       Работа с буферами и задание цвета объектов

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-буфера необходимо производить перед началом построения очередного кадра изображения.

 

Назад | Оглавление | Домой | Далее