Опубликован: 13.07.2010 | Доступ: свободный | Студентов: 889 / 20 | Оценка: 4.40 / 4.20 | Длительность: 77:34:00
Самостоятельная работа 23:

Смешивание, туман, сглаживание, отклонение в OpenGL

Аннотация: В лекции рассматривается пример работы со смешиванием.

Файлы к лабораторной работе Вы можете скачать здесь.

Для того, чтобы сделать отображение сцены еще более реалистичным, библиотека OpenGL предлагает еще несколько технологий, позволяющих ввести дополнительные детали:

  1. Смешивание (Blending) - использование альфа-компонента цвета для получения эффекта прозрачности.
  2. Сглаживание (Antialiasing) - подбор цвета граничных пикселов точек и линий для устранения их "зубчатости", возникающей из-за дискретности пиксельной сетки.
  3. Туман (Fog) - добавление эффекта, когда более удаленные от наблюдателя объекты кажутся более размытыми.
  4. Параметры точки (PointDistanceAttenuation) - рисование точки "налету" с цветом и размером, изменяющимися в зависимости от расстояния до наблюдателя. Эта технология применяется для ускорения рисования множеств как скопища отдельных частиц разного размера и цвета, например, снега, дождя.
  5. Коррекция глубины многоугольников - технология комбинированного рисования многоугольников, залитых одним цветом, с контуром другого цвета и нужной толщиной или фактурой. Поскольку закрашенные многоугольники и их контурные линии растеризуются по разному, то значения глубины, вычисленные для линий, могут не совпадать со значениями глубины для границ многоугольника даже между двумя одинаковыми вершинами. Этот нежелательный эффект визуально неприятен и напоминает стежки (stitching) на швах одежды. Он может быть устранен коррекцией глубины многоугольников.

Смешивание

Применяемая в OpenGL модель цвета RGBA подразумевает в качестве последнего параметра альфа-канал, задающий прозрачность. Значения этого параметра лежат в пределах [0, 1], где 0 - абсолютно прозрачный ( transparency ), 1 - абсолютно непрозрачный ( opacity ). Когда смешивание включено, то входящий в буфер кадра после растеризации фрагмент рисунка ( источник, Source - S ) комбинируется со значениями цвета пикселов уже хранящегося там блока пикселов ( получатель, Destination - D ). При отключенном смешивании информация источника о цвете в буфере цвета просто заменяет прежнюю информацию получателя и ни о какой прозрачности говорить не приходится.

Смешивание позволяет управлять тем, в каких пропорциях сохраненный ранее цвет должен быть объединен с новым фрагментом. С помощью альфа-компонента можно получать эффекты, когда сквозь новые фрагменты будут проступать ранее сохраненные фрагменты, которые полностью не замещаются новыми. Смешивание - основа технологии полупрозрачности, цифровой композиции и закрашивания.

Пусть, например, наблюдатель смотрит на объект через зеленое стекло. Цвет, который он увидит, будет смесью цвета стекла и цвета объекта. Ниже приведены два варианта этого примера с белым и черным фоном. Обратите внимание, что в реальной жизни черный фон вокруг объекта через зеленое стекло все равно должен быть черным, а на рисунке это не так. Но зато черный цвет увеличивает зрительный контраст цветов.



Режим смешивания включается и выключается командами

glEnable(GL_BLENDING);
   glDisable(GL_BLENDING);

По умолчанию режим смешивания выключен.

Во время смешивания цвета входящего фрагмента (источника) комбинируются с соответствующими текущими сохраненными значениями пикселей в два этапа по следующему алгоритму: