6.2. Математические отображения

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

Встроенная функция dot может возвращать значение интенсивности, используя значение цвета. Чтобы вычислить значение яркости по цветовой системе Международной комиссии по освещению (МКО, или CIE) на основе обычных RGB-значений, определенных в соответствии с цветовым стандартом телевидения повышенной четкости (HDTV), можно сделать так:

float luminance = dot(vec3 (0.2125, 0.7154. 0.0721), rgbColor):

HDTV - это стандарт для современных промышленных мониторов, который определяет линейное цветовое пространство RGB. Коэффициенты 0,299, 0,587, 0,114 часто используются для преобразования значений RGB в значения яркости. Эти значения были установлены Национальным комитетом по телевизионным системам США (НТСЦ, NTSC) в 1953 г., чтобы вычислять яркость для мониторов и преобразовывать нелинейные значения RGB в значения яркости. Для современных мониторов эти значения вычисляют яркость не совсем точно, но вполне подходят для вычисления нелинейных значений яркости из нелинейных значений RGB:

float luma = dot(vec3 (0.299, 0.587. 0.114). rgbColor):

16.3. Операции поиска в таблице

В OpenGL определено несколько таблиц, и часть из них используется для работы с изображениями. Таблицы - это простой способ отображения входного значения на одно или несколько значений, что помогает при обработке цвета. Так как в OpenGL появилась возможность работы с программируемыми процессорами, входные значения можно вычислять в шейдере, затем выполнять поиск в таблице и использовать полученные значения при дальнейших вычислениях в том же шейдере. Это открывает множество новых возможностей использования таблиц поиска.

Один из эффективных способов выполнить операцию поиска в шейдере OpenGL - использовать одномерную текстурную карту. Таблица поиска может быть произвольного размера (хотя во многих реализациях OpenGL этот размер ограничен 256 записями), и в ней можно отображать входное значение как на одно выходное значение, так и на двух-, трех- или четырехкомпонентное значение. Если возвращаемые значения должны быть дискретными, режим одномерной текстуры устанавливается в GL_NEAREST. Если же нужна интерполяция между соседними значениями, устанавливается GL_L I NEAR.

Значение интенсивности в диапазоне [0,1] можно принять в качестве текстурной координаты для доступа к одномерной текстуре. Встроенные функции работы с текстурами всегда возвращают значение RGBA. Если одноканальная текстура связана с текстурным модулем, на который указывает семплер, значение текстуры будет храниться во всех каналах (красном, зеленом и синем), и можно взять значение из любого канала:


⇐ вернуться назад | | далее ⇒