Выбранная функция атмосферного поглощения применяется для расчета цвета объекта, определяемого смешанным влиянием цвета поверхности и атмосферы. В процедуре создания атмосферных эффектов OpenGL для этого используется уравнение (10.33).
ФУНКЦИИ ПРОЗРАЧНОСТИ OpenGL
Некоторые эффекты прозрачности можно сымитировать в OpenGL, используя процедуры смешивания цветов, описанные в разделе 4.3. Однако в общем случае прямо реализовать прозрачность в программе OpenGL невозможно. Для простой сцены, содержащей несколько прозрачных и несколько непрозрачных поверхностей, можно скомбинировать цвета объектов, используя альфа-сопряжение (alpha blending), задав степень прозрачности и обработав поверхности в порядке увеличения глубины. Отметим, впрочем, что в операциях смешивания цветов OpenGL игнорируются эффекты преломления, и обработка прозрачных поверхностей на сложных сценах с разнообразными условиями освещения или анимацией может быть весьма длительной. Кроме того, OpenGL не предлагает прямых средств имитации внешнего вида поверхности полупрозрачного объекта (такого как зернистая поверхность пластмассы или панель “морозного” стекла), который диффузно рассеивает свет, проходящий сквозь полупрозрачный материал. Таким образом, чтобы отобразить полупрозрачные поверхности или эффекты освещения, порожденные преломлением, потребуется написать собственную программу. Чтобы сымитировать эффекты освещенности, характерные для полупрозрачных объектов, можно использовать комбинацию текстуры поверхности и свойств материала. Для учета эффектов преломления можно сместить положения пикселей для поверхностей, расположенных за полупрозрачным объектом, используя уравнение (10.29).
Чтобы отнести объекты на сцене к полупрозрачным, используется параметр “альфа” в таких командах описания RGBA-цвета поверхности, как glMaterial и gl-Color. Для поверхности значение параметра “альфа” можно положить равным коэффициенту прозрачности (уравнение (10.30)) этого объекта. Например, цвет прозрачной поверхности можно задать такой функцией.
glColor4f (R, G, В, А); В этом случае значение параметра альфа устанавливается равным А = kt. Полностью прозрачная поверхность имеет альфа-фактор А = 1.0, а непрозрачная - А = 0.0.
После присвоения значений прозрачности активизируются функции смешивания цветов OpenGL и обрабатываются поверхности, начиная с наиболее отдаленных объектов к объектам, ближайшим к точке наблюдения. После активизации смешивания цветов каждый цвет поверхности объединяется со всеми накладывающимися поверхностями, уже занесенными в буфер кадра, с использованием соотнесенных с ними альфа-факторов.
Коэффициенты смешивания цветов задаются так, чтобы все компоненты цвета текущей поверхности (объект-“источник”) умножались на (1 - А) = (1 - kt), и все компоненты цвета соответствующих позиций буфера кадра (“цель”) умножались на величину А = kt\
glEnable (GL_BLEND);
glBlendFunc (GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); Затем два цвета смешиваются согласно уравнению (10.30), где альфа-фактор равен kt, а в буфере кадров используются цвета поверхности, расположенной за обрабатываемым прозрачным объектом. Например, если А = 0,3, то для каждой точки поверхности новый цвет в буфере кадров является суммой 30% текущего цвета буфера и 70% отраженного цвета объекта. (Альтернативно в качестве альфа-фактора можно использовать показатель непрозрачности, а не показатель прозрачности. Если положить А равным показателю непрозрачности, в функции glBlendFunc придется поменять местами значения двух аргументов.)