}

16.5.4. Резкость

Метод уменьшения резкости приведен в листинге 16.6. Конечное изображение можно создать размыванием исходного изображения или другим способом. Интерполяция между изображениями уменьшит высокие частоты, а экстраполяция (Alpha больше 1) увеличит. В результате будет создана маска уменьшения контрастности. Результаты выполнения этого фрагментного шейдера показаны на цветном рис. 29.

Листинг 16.6. Фрагментный шейдер для уменьшения резкости

uniform sampler2D Blurry; uniform float Alpha;
void main (void) {
vec3 blurred = vec3 (texture2D(Blurry. gl_TexCoord[0].st)); vec3 color = gl_Color.rgb * Alpha + blurred * (1.0 - Alpha); gl_FragColor = vec4 (color. 1.0);
}

На этих примерах показан простой случай изменения целого изображения с изменением простого значения Alpha. Возможна и более сложная обработка - например, Alpha может быть значением функции от других переменных. Можно в какой-либо текстуре определить сложную форму, ограничивающую область изображения для внесения изменений, или выбрать несколько небольших областей на изображении с помощью какого-либо шаблона, маски. Операцию можно выполнять выборочно, для пикселов с конкретным диапазоном яркости (тени, области повышенной яркости или средние тона).

Шейдеры для обработки изображения

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

16.6. Режимы плавного перехода Высокоуровневый язык программирования достаточно выразителен для того, чтобы можно было сочетать два изображения самыми разными способами. В нем либо оба изображения сохраняются в текстурной памяти, либо одно из них загружается приложением с помощью функции gl DrawPi xel s. Приведем несколько фрагментов кода шейдера OpenGL для плавного попиксельного перехода в разных режимах:


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