ВУЗ:
Составители:
Рубрика:
54
Параметр Метод
GL_SRC_ALPHA_SATURA
TE
(i, i, i, 1), где i = min (A
S
, k
A
–
A
D
/ k
A
)
В таблице приняты следующие условные обозначения: R
S
, G
S
, B
S
, A
S
определяют составляющие цве-
та источника; R
D
, G
D
, B
D
, A
D
определяют составляющие цвета приемника. Значение цвета изменяется в
диапазоне [0, k
C
= 2
mC
– 1], где C означает составляющие цвета R, G, B и A, а m – количество битовых
плоскостей видео памяти, отведенных под R, G, B и A соответственно. Для определения итогового зна-
чения RGBA после смешивания используются следующие уравнения:
R(d) = min(k
R
, R
S
⋅ s
R
+ R
D
⋅ d
R
);
G(d) = min(k
G
, G
S
⋅ s
G
+ G
D
⋅ d
G
);
B(d) = min(k
B
, B
S
⋅ s
B
+ B
D
⋅ d
B
);
A(d) = min(k
A
, A
S
⋅ s
A
+ A
D
⋅ d
A
),
где s
R
, s
G
, s
B
, s
A
, d
R
, d
G
, d
B
, d
A
– соответствующие компоненты векторов методов из таблицы для источ-
ника и для приемника цвета.
По умолчанию смешивание заблокировано. Для его включения используется команда glE-
nable(GL_BLEND). Для отключения – glDesable(GL_BLEND).
Приведенные возможности смешивания цветов позволяют осуществить достаточно сложные замыслы
разработчиков. На практике часто используют команду glBlendFunc(GL_SRC_ALPHA,
GL_ONE_MINUS_SRC_ALPHA) с примитивами, отсортированными по глубине от наиболее к наименее
отдаленным и непрозрачными элементами в глубине. Последнее подсказано логикой визуализации "па-
кета" полупрозрачных графических примитивов.
Рассмотрим пример вывода трех примитивов: непрозрачного красного треугольника; полупрозрач-
ного зеленого квадрата и полупрозрачного синего прямоугольника. Процедура вывода имеет вид:
GLvoid DrawPrim()
{
glClear( GL_COLOR_BUFFER_BIT);
// Непрозрачный красный треугольник
glColor4f(1.0f, 0.0f,0.0f, 1.0f);
glBegin(GL_TRIANGLES);
glVertex3f( 0.0f, 1.8f, 1.0f);
glVertex3f(-1.4f, -1.5f, 1.0f);
glVertex3f( 1.4f, -1.5f, 1.0f);
glEnd();
glEnable(GL_BLEND); // Разрешаем смешивание цветов
glBlendFunc(GL_SRC_ALPHA,GL_SRC_ALPHA); // Режим смешивания
glColor4f(0.0f, 1.0f,0.0f, 0.5f); // Полупрозрачный зеленый квадрат
glBegin(GL_QUADS);
glVertex3f( 1.0f, 1.0f, 2.0f);
glVertex3f(-1.0f, 1.0f, 2.0f);
glVertex3f(-1.0f, -1.0f, 2.0f);
glVertex3f( 1.0f, -1.0f, 2.0f);
glEnd();
// Полупрозрачный синий прямоугольник
glColor4f(0.0f, 0.0f,1.0f, 0.5f);
glBegin(GL_QUADS);
glVertex3f( 2.0f, 0.5f, 0.0f);
glVertex3f(-2.0f, 0.5f, 0.0f);
glVertex3f(-2.0f, -0.5f, 0.0f);
Страницы
- « первая
- ‹ предыдущая
- …
- 50
- 51
- 52
- 53
- 54
- …
- следующая ›
- последняя »