GRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów

Transkrypt

GRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
GRAFIKA KOMPUTEROWA
8: Konwersja i mieszanie kolorów
http://galaxy.agh.edu.pl/~mhojny
Prowadzący:
dr inż. Hojny Marcin
Akademia Górniczo-Hutnicza
Mickiewicza 30
30-059 Krakow
pawilon B5/p.406
tel. (+48)12 617 46 37
e-mail: [email protected]
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
1. Cel projektu:
Zapoznanie się z podstawowymi technikami mieszania kolorów oraz konwersji modeli barw.
2. Zadanie projektowe:
W oparciu o opracowaną aplikację w ramach poprzednich zajęć:
a) dodać możliwość wyświetlenia mapy barw w oparciu o wybrany model mieszania
b) opracować kalkulator konwersji modelu barw RGB->CMY, CMY->RGB
3. BLENDING
Mieszanie kolorów lub też inaczej blending (alfa blending) polega na ustaleniu wynikowego
koloru piksela będącego kombinacją koloru źródłowego (Rs , Gs , Bs , As ) oraz koloru
przeznaczenia (Rd , Gd , Bd , Ad ) przechowywanego w buforze kolorów. Mieszanie kolorów
wykorzystywane jest do uzyskania efektów przezroczystości, antyaliasingu czy też odbicia.
Włączanie i wyłączanie mieszania kolorów
Aktywacja mieszania (domyślnie wyłączona) kolorów wymaga wywołania funkcji glEnable
z parametrem GL_BLEND. Wywołanie funkcji glDisable aktywuje wyłączenie mieszania
kolorów.
Równanie mieszania kolorów
Domyślnie kolor wynikowy (R, G, B, A) obliczany jest na podstawie równania mieszania
kolorów:
=
=
=
=
+
+
+
+
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
gdzie (Sr , Sg , Sb , Sa ) i (Dr , Dg , Db , Da ) są odpowiednio współczynnikami mieszania dla
koloru źródłowego i koloru przeznaczenia. Wartości składowych (R, G, B, A) koloru
wynikowego zawężane są do przedziału [0, 1], stąd poprawna matematycznie forma zapisu
powyższego równania:
=
=
=
=
(
(
(
(
,
,
,
,
+
+
+
+
)
)
)
)
Wybór innego równania mieszania kolorów umożliwia funkcja:
void glBlendEquation( GLenum mode )
której parametr mode może przyjąć jedną z poniższych wartości:
GL_FUNC_ADD - domyślne równanie mieszania,
=
=
=
=
(
(
(
(
,
,
,
,
GL_FUNC_SUBTRACT - równanie mieszania:
GL_FUNC_REVERSE_SUBTRACT
- równanie mieszania:
−
−
−
−
)
)
)
)
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
=
=
=
=
GL_MIN
- równanie mieszania:
GL_MAX
- równanie mieszania:
=
=
=
=
=
=
=
=
(
(
(
(
,
,
,
,
( ,
( ,
( ,
( ,
( ,
( ,
( ,
( ,
−
−
−
−
)
)
)
)
)
)
)
)
)
)
)
)
Współczynniki mieszania kolorów
Powyższe równania mieszania korzystają ze współczynników mieszania kolorów dla koloru
źródłowego (Sr , Sg , Sb , Sa ) oraz koloru przeznaczenia (Dr , Dg , Db , Da ).
W celu określania wartości tych współczynników można wykorzystać podstawową funkcję w
bibliotece OpenGL:
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
void glBlendFunc( GLenum src, GLenum dst )
Parametry funkcji src oraz dst określają sposób obliczania współczynników mieszania
kolorów:
parametr
współczynnik mieszania
GL_ZERO
(0, 0, 0, 0)
GL_ONE
(1, 1, 1, 1)
GL_SRC_COLOR
(Rs , Gs , Bs , As )
GL_ONE_MINUS_SRC_COLOR
(1, 1, 1, 1) − (Rs , Gs , Bs , As )
GL_DST_COLOR
(Rd , Gd , Bd , Ad )
GL_ONE_MINUS_DST_COLOR
(1, 1, 1, 1) − (Rd , Gd , Bd , Ad )
GL_SRC_ALPHA
(As , As , As , As )
GL_ONE_MINUS_SRC_ALPHA
(1, 1, 1, 1) − (As , As , As , As )
GL_DST_ALPHA
(Ad , Ad , Ad , Ad )
GL_ONE_MINUS_DST_ALPHA
(1, 1, 1, 1) − (Ad , Ad , Ad , Ad )
GL_CONSTANT_COLOR
(Rc, Gc, Bc, Ac)
GL_ONE_MINUS_CONSTANT_COLOR (1, 1, 1, 1) − (Rc, Gc, Bc, Ac)
GL_CONSTANT_ALPHA
(Ac, Ac, Ac, Ac)
GL_ONE_MINUS_CONSTANT_ALPHA (1, 1, 1, 1) − (Ac, Ac, Ac, Ac)
GL_SRC_ALPHA_SATURATE
(f, f, f, 1) , f = min (As , 1 − Ad )
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
Wartość początkowa dla parametru src wynosi GL_ONE a dla parametru dst wynosi GL_ZERO.
Ostatnia stała GL_SRC_ALPHA_SATURATE może być stosowana wyłącznie jako wartość
parametru src.
Przykładowy fragment kodu:
void Draw()
{
glClearColor( 0.0, 1.0, 0.0, 1.0 ); // kolor tła - zawartość bufora koloru
glClear( GL_COLOR_BUFFER_BIT ); // czyszczenie bufora koloru
glEnable( GL_BLEND ); // włączenie mieszania kolorów
glBlendFunc( GL_ONE, GL_ONE ); // współczynniki mieszania kolorów
// tu rysujemy np. kwadrat
glBlendEquation( GL_FUNC_ADD ); // równanie GL_FUNC_ADD
// tu rysujemy np. kwadrat
glBlendEquation( GL_MIN ); // równanie GL_MIN
// tu rysujemy np. kwadrat
glBlendEquation( GL_MAX ); // równanie GL_MAX
// tu rysujemy np. kwadrat
glBlendEquation( GL_FUNC_SUBTRACT ); // równanie GL_FUNC_SUBTRACT
// tu rysujemy np. kwadrat
glBlendEquation( GL_FUNC_REVERSE_SUBTRACT );
// równanie GL_FUNC_REVERSE_SUBTRACT
// tu rysujemy np. kwadrat
4. KONWERSJA MODELI BARW
RGB na CMY
C=1-R
M=1-G
Y=1-B
CMY na RGB
R=1-C
G=1-M
B=1–Y
5. Co na następnych zajęciach:
Przeźroczystość.
RGB na CMYK
K = 1 - max{R, G, B}
C = (1 - R - K) / (1 - K)
M = (1 - G - K) / (1 - K)
Y = (1 - B - K) / (1 - K)
CMYK na RGB
R = (1 - C) * (1 - K)
G = (1 - M) * (1 - K)
B = (1 - Y) * (1 - K)

Podobne dokumenty