Статьи / Смешивание и прозрачность OpenGL

Смешивание и прозрачность OpenGL


Отправить ссылку:

Смешивание и прозрачность в OpenGL

Введение

В статье пойдёт речь о прозрачности и смешивании в OpenGL. При написании стати использовалась версия OpenGL1.3. Предполагается, что читатель уже знаком с основами OpenGL.

Смешивание и прозрачность

Для создания полупрозрачных объектов используется смешивание. Ведь если объект является полупрозрачным, то он не полностью закрывает объекты, находящиеся за ним, как будто вы смотрите через стекло или мутное стекло. Значение прозрачности в этом случае отвечает за то, насколько через стекло хорошо видно.
Рассмотрим на примере, у нас есть 2 объекта: один жёлтый, другой зелёный. Причём объекты являются полупрозрачными. Смешанный цвет получается путём смешивания жёлтого и зелёного цвета. Результат вы можете видеть на рисунке 1.

Стандартное смешиваение
Рисунок 1 - Смешивание жёлтого и зелёного

Результирующий цвет смешивания рассчитывается по формуле:

resultColor = srcColor * srcAlpha + destColor * (1 - srcAlpha), (Формула 1)

destColor - цвет фона, на который накладывается зелёный круг, то есть это жёлтый цвет (1.0, 1.0, 0.0).
srcColor - цвет круга, который накладывается, то есть это зелёный (0.0, 1.0, 0.0)
srcAlpha - прозрачность круга, который накладывается, то есть 0.5.
resultColor - результирующий цвет (0.5, 1.0, 0.0).

В скобках указаны значения компонентов цвета, т.е. красной, зелёной и синей компоненты.

Использование смешивания в OpenGL

Для использования смешивания его необходимо включить, используя функцию:

glEnable (GL_BLEND);

По умолчанию смешивание выключено.
Для задания коэффициентов функции прозрачности обычно используются функции:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

По умолчанию это значение GL_ONE, GL_ONE. В формуле 1, GL_SRC_ALPHA это значение коэффициента srcAlpha, то есть коэффициент при объекте, который рисуется, а GL_ONE_MINUS_SRC_ALPHA (1 - srcAlpha), коэффициент при объекте на который рисуется изображение.
По умолчанию применяется функция смешивания сложение, то есть в формуле 1 две части выражения складываются. Но можно использовать и другие функции, например вычитание, для этого необходимо это указать:

glBlendEquation(GL_FUNC_SUBTRACT);

Возможно, функцию glBlendEquation необходимо будет извлекать из расширения. Тогда для функции вычитания формула смешивания будет выгладить так:

resultColor = srcColor * srcAlpha - destColor * (1 - srcAlpha), (Формула 2)

Исходя из формулы, цвет смешивания будет (0.5, 0.0, 0.0). Результат представлен ниже:

Смешивание с использованием вычетания
Рисунок 2 - Смешивание жёлтого и зелёного с использованием вычитания

Также для задания функций можно использовать более специальные функции:

GL_MIN - выбор минимального значения.
GL_MAX - выбор максимального значения.

Чтобы объект был полупрозрачным необходимо задать его прозрачность, используя функцию glColor4f(1.0, 1.0, 0.0, 0.5), где первые 3 параметра это цвет объекта, а 4 параметр это прозрачность.

Использование прозрачных текстур

Для задания не равномерной прозрачности объекта можно использовать текстуру с прозрачностью. Текстура создаётся функцией glTexImage2D, формат буфера должен быть GL_RGBA и содержать прозрачность.
Перед рисованием рисуем жёлтый круг и делам так, чтобы только цвет текстуры использовался при рисовании:

glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

Ниже приведён пример с полупрозрачной текстурой, которая в центре полностью прозрачная:

Полупрозрачная текстура
Рисунок 3 - полупрозрачная текстура

Заключение

В статье были продемонстрированы основы использования смешивания в OpenGL. Вы также можете скачать пример, в котором реализовано то, что было описано в статье. Для смены изображений в примере используются клавиши "1", "2", "3".

Олег (Дата )

Все вопросы и предложения высылайте на адрес soft_support@list.ru. Необходимо в заголовке указать название статьи.

Оставь свой отзыв


Ответьте на вопрос (ответ маленькими буквами)* :
20-15?(ответ цифрами)