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

UptoLike

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

55
glVertex3f( 2.0f, -0.5f, 0.0f);
glEnd();
glDisable(GL_BLEND); // Запрещаем смешивание цветов
}
В результате работы данной процедуры мы можем видеть красный треугольник через полупрозрач-
ный квадрат и прямоугольник.
14 РАБОТА С БУФЕРАМИ
За общепринятым понятием буфер кадра в OpenGL скрывается не один, а несколько буферов – цве-
та, трафарета, глубины и аккумулятора (накопления). Это разделение позволяет расширить функцио-
нальные возможности OpenGL. Рассмотрим механизмы работы некоторых буферов.
14.1 Буфер трафарета
Буфер трафарета предоставляет огромные возможности для творчества. С его помощью реализуются
самые разнообразные эффекты, начиная от простого вырезания одной фигуры из другой до реализации
теней, отражений и прочих непростых функций, требующих от вас уже не только знакомство с библио-
текой OpenGL, но и понимания алгоритмов машинной графики.
Наложение трафарета разрешает или нет рисование на пиксельном уровне. В качестве трафарета мо-
жет выступать любой графический примитив. При этом рисование осуществляется в плоскости тра-
фарета. После чего этот буфер используется как маска для вывода графики на экран. Главный меха-
низм работы с трафаретом базируется на тестах трафарета, которые сравнивают значения в буфере
трафарета с заданным значением. Если тест проходит, то тестируемый пиксель помещается в буфер
кадра для визуализации.
Сам тест разрешается или блокируется командами glEnable/glDisable с аргументом
GL_STENCIL_TEST. Очищается буфер трафарета при помощи функции glClear с параметром
GL_STENCIL_BUFFER_BIT.
Для проведения трафаретного тестирования предусмотрены команды: glStencilFunc, отвечающая за
функцию сравнения, и glStencilOp, определяющая действие на базе проверки трафарета.
Рассмотрим эти команды подробнее:
void glStencilFunc (GLenum func, int ref, GLuint mask)
Данная команда задает правило (параметром func), по которому будет определяться результат срав-
нения значений, хранящихся в буфере трафаретов (stencil) с некоторым заданным через параметр ref.
Сравнение осуществляется по маске mask. Переменная func может принимать одно из следующих зна-
чений:
Константа Тест …
GL_NEVER НЕ ПРОХОДИТ НИКОГДА
GL_LESS
Проходит, если (ref & mask) < (stencil &
mask)
GL_EQUAL
Проходит, если (ref & mask) = (stencil &
mask)
GL_LEQUAL
Проходит, если (ref & mask) ≤ (stencil &
mask)
GL_GREATE
R
Проходит, если (ref & mask) > (stencil &
mask)
GL_NOTEQU
AL
Проходит, если (ref & mask) ≠ (stencil &
mask)
GL_GEQUAL
Проходит, если (ref & mask) ≥(stencil &
mask)
GL_ALWAYS
Проходит всегда