colorOut.g = texturelDClut. colorln.g).g: // GL_PIXEL_MAP_G_TO_G
colorOut.b = texturelDClut. colorln.b),b: // GL_PIXEL_MAP_B_TO_B
colorOut.a = texturelDClut. colorln.a).a: // GL PIXEL MAP A TO A

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

Система CIE была определена в 1931 г. Международной комиссией по освещению. Эта цветовая система не зависит от каких-либо устройств и основана на восприятии цвета человеческим зрением. Комиссия установила некий первичный набор, XYZ, соответствующий восприятию цвета сетчаткой глаза. После опытов с наблюдателями-людьми первичный набор был определен так, что весь видимый

16.5. Интерполяция и экстраполяция изображения цвет попадает в сочетания положительных значений X, Ки Z, а от Y зависит, насколько светлым будет оттенок цвета. В CIE-системе может быть определен любой видимый цвет. Цвета можно преобразовывать из систем, зависящих от конкретного устройства, в системы, зависящие от других устройств, или в какую-либо общую систему.

Представление данных в виде таблицы как раз подходит для выполнения таких преобразований. Стандарт HDTV имеет следующий набор первичных данных и использует белую точку DG5 (природное солнечное освещение).

Координата

R G

в

White
X 0,640 0,300 0,150 0,3127
Y 0,330 0,600 0,060 0,3290
Z 0,030 0,100 0,790 0,3582

В листинге 16.1 приведен шейдер OpenGL, который преобразует значения цвета из системы CIE в RGB-значения стандарта HDTV с помощью точки D65, а в листинге 16.2 показано обратное преобразование. Таблицы, взятые из специальной литературы, выглядят транспонированными, так как в языке шейдеров OpenGL таблицы передаются по столбцам.

Листинг 16.1. Код шейдера OpenGL для преобразования значений CIE в RGB

const mat3 CIEtoRGBmat = mat3 ( 3.240479. -0.969256. 0.055648.
-1.537150. 1.875992. -0.204043.
-0.498535. 0.041556. 1.057311): vec3 rgbColor = cieColor * CIEtoRGBmat:

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