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

UptoLike

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

20
оставшуюся часть объекта после отсечения. Для разрешения работы с подобными плоскостями необхо-
димо выполнит команду glEnable() с аргументом GL_CLIP_PLANEi. Отключение секущей плоскости
происходит после команды glDisable() с соответствующим аргументом.
Рассмотрим пример отсечения некоторого объекта двумя плоскостями. Первая плоскость отсекает
полупространство для которого x < 1 и вторая плоскость отсекает полупространство для которого y < 0
.
// Коэффициенты A, B, C и D для первой плоскости отсечения
GLdouble Pl0[] ={1.0, 0.0 ,0.0 ,1.0};
// Коэффициенты A, B,C и D для второй плоскости отсечения
GLdouble Pl1[] ={0.0 ,1.0 ,0.0 ,0.0};
// Идентифицируем первую плоскость отсечения
glClipPlane(GL_CLIP_PLANE0, Pl0);
// Идентифицируем вторую плоскость отсечения
glClipPlane(GL_CLIP_PLANE1, Pl1);
// Включаем отсечение первой плоскостью
glEnable (GL_CLIP_PLANE0);
// Включаем отсечение второй плоскостью
glEnable (GL_CLIP_PLANE1);
// Здесь выводим объект …
Следует помнить, что параметры секущей плоскости автоматически изменяются в соответствии с
модельными и видовыми преобразованиями. И еще, вектор нормали (A, B, C) не должен быть обяза-
тельно перпендикулярен осям, как в нашем примере.
5.10 Логические операции при выводе объекта
При поступлении значений объекта в буфер кадра в OpenGL обозначаются несколько интересных
ситуаций: либо эти значения просто замещают существующие, либо происходит логическая операция
между данными, которые находятся в соответствующем месте буфера кадра c поступающими данными.
Задание логической операции определяется командой void glLogicOp(GLenum opcode).
Параметр opcode задает логическую операцию и может принимать следующие значения (принятые
обозначения: s – значение бита источника, d – значение бита приемника).
Opcode
Логическая операция
GL_CLEAR 0
GL_SET
1
GL_COPY
s
GL_COPY_INVERTED
!s
GL_NOOP
d
GL_INVERT
!d
GL_AND
s&d
GL_NAND
!(s&d)
GL_OR
s|d
GL_NOR
!(s|d)
GL_XOR
s^d
GL_EQUIV
!(s^d)
GL_AND_REVERSE
s&!d
GL_AND_INVERTED
!s&d
GL_OR_REVERSE
s|!d
GL_OR_INVERTED
!s|d
Для разрешения подобного режима работы необходимо отработать команду glEnable() с аргументом
GL_COLOR_LOGIC_OP для полноцветного цветового режима. Выключается режим командой glDis-