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

OpenGL содержит внутри себя несколько различных буферов. Среди них фрейм буфер (где строится изображение), z-буфер, служащий для удаления невидимых поверхностей, буфер трафарета и аккумулирующий буфер.

Для очистки внутренних буферов служит процедура glClear(GLbitfield mask), очищающая буферы, заданные пе­ременной mask. Параметр mask является комбинацией следующих констант:

GL_COLOR_BUFFER_BIT – очистить буфер изображения (фреймбуфер);

GL_DEPTH_BUFFER_BIT – очистить z-буфер;

GL_ACCUM_BUFFER_BIT – очистить аккумулирующий буфер;

GL_STENCIL_BUFFER_BIT – очистить буфер трафарета.

Цвет, которым очищается буфер изображения, задаётся процедурой glClear­Color(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-буфера необходимо производить перед началом по­строения очеред­ного кадра изображения.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: