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)