□ base - vec4 - содержит значение цвета RGB А из исходного изображения;

□ bl end - vec4 - содержит значение цвета RGB А из изображения, которое переходит в исходное;

□ resul t - vec4 - содержит значение цвета RGB А, результат операции плавного перехода;

□ если понадобится для вычислений, white является vec4 и содержит (1,0,1,0,1,0,1,0);

□ если понадобится для вычислений, 1 umCoeff является vec4 и содержит (0,2125, 0,7154, 0,0721, 1,0);

□ для окончательных вычислений base и resul t сочетаются с помощью числа с плавающей запятой opaci ty (непрозрачность), которое определяет участие каждого компонента.

Вероятно, результат выполнения приведенного кода не будет идентичен результату, полученному в излюбленной программе читателя, но эффекты будут очень похожими. Код шейдера OpenGL для некоторых режимов плавного перехода был создан с помощью информации, содержащейся в статье Дженса Груше-ля «Режимы плавного перехода», доступной по адресу http://www.pegtop.net/delphi/ blendmodes. Если явно не указано что-то иное, операции плавного перехода не коммутативные (если поменять местами исходное и конечное изображения, результат изменится).

Результаты выполнения шейдеров плавного перехода в различных режимах показаны на цветном рис. 30.

16.6.1. Обычный Этот режим работы с изображением часто предполагается по умолчанию. Конечное изображение помещается над исходным. Окончательное изображение такое же, как конечное, если значение прозрачности 1,0 (исходное изображение полностью закрыто). При других значениях прозрачности результатом будет сочетание двух изображений, основанное на значении opacity: result = blend:

16.6. Режимы плавного перехода

16.6.2. Среднее значение В этом режиме два изображения складываются и результат делится пополам. Сделать это - все равно что применить обычный режим со значением opacity, равным 0,5. Операция коммутативна:

result = (base + blend) * 0.5;

16.6.3. Растворение В каждом пикселе bl end или base выбирается случайным образом. Значение opaci ty используется как коэффициент вероятности выбора значения blend. Чем ближе opacity к 1,0, тем выше вероятность выбора blend, а не base. Если изображение нарисовано как текстура на прямоугольнике, значения текстурных координат можно использовать как аргумент функции noiselD, чтобы получить значение, которое можно использовать для выбора псевдослучайного числа, периодически встречающегося в последующих выборках. Здесь можно применять и коэффициент масштабирования для того, чтобы получить шум большей частоты и создать иллюзию случайности. Значение функции шума будет расположено в диапазоне [-1, 1 ], так что нужно добавить к нему 1 и умножить на 0,5, чтобы получить число в диапазоне [0, 1]:


⇐ Предыдущая| |Следующая ⇒