OpenGL. Компьютерная графика. Васильев С.А. - 55 стр.

UptoLike

Составители: 

57
glColor3f( 1,0,1);glVertex3f( 2.0f, -2.0f, -0.1f);
glEnd();
// Разрешаем проведение теста трафарета для треугольного "окна"
glEnable(GL_STENCIL_TEST);
// Определяем функцию и значение для сравнения,
// треугольник не рисуется
glStencilFunc(GL_NEVER, 2, 0);
// Заменяем значение буфера трафарета на значение 2
glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);
glBegin(GL_POLYGON); // Определяем область "окна"
glVertex3f( 0.0f, 1.0f, 0.0f);
glVertex3f( 1.0f, -1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glEnd();
// Изменяем параметры теста буфера трафарета;
// следующий объект будет рисоваться только в тех местах,
// для которых значение в буфере трафарета не равно 2
glStencilFunc(GL_NOTEQUAL, 2, 255);
glColor3f(0.0f, 1.0f,0.0f); // Задаем зеленый цвет
glBegin(GL_POLYGON); // Рисуем треугольник
glVertex3f( 0.0f, 1.6f, 0.0f);
glVertex3f(-1.4f, -1.4f, 0.0f);
glVertex3f( 1.4f, -1.4f, 0.0f);
glEnd();
}
При работе с буфером трафарета необходимо аккуратно продумывать последовательность дейст-
вий.
14.2 Буферы накопления
В OpenGL возможно существование специально отведенных внутренних буферов (передний
GL_FRONT, задний – GL_BACK, левый – GL_LEFT, правый – GL_RIGHT, передний левый
GL_FRONT_LEFT, передний правый – GL_FRONT_RIGHT, задний левый – GL_BACK_LEFT ,
задний правый – GL_BACK_RIGHT и вспомогательные – GL_AUX0, GL_AUX1, GL_AUX2,
GL_AUX3) для временного хранения визуальных изображений. Конкретное наличие того или иного
буфера зависит от конфигурирования системы. На практике используют GL_FRONT и GL_BACK. При
этом возможен процесс накапливания значений пиксель изображений и процесс считывания этих дан-
ных.
Выбор буфера для записи изображения, например, для работы команды glDrawPixels(), выполняется
командой
void glDrawBuffer (GLenum mode)
Параметр mode определяет буфер для записи. Этой командой можно выбрать сразу несколько бу-
феров и записывать изображение сразу в несколько буферов По умолчанию mode равно GL_FRONT
для режима
с однократной буферизацией и GL_BACK для режима с двойной буферизацией.
Для выбора цветового буфера, который будет служить в качестве источника для чтения пикселей,
например, при вызове команд glReadPixels(), glCopyPixels(), glCopyTexImage*(), существует команда
void glReadBuffer(GLenum mode)
Параметр mode определяет буфер для чтения. Буферы для glReadBuffers() те же самые, что и для
команды glDrawBuffers(). По умолчанию mode равно GL_FRONT для режима с однократной буфериза-
цией и GL_BACK для режима с двойной буферизацией.