Mieszanie kolorów Dorota Smorawa
Tworzenie efektu przezroczystości Biblioteka OpenGL umożliwia nam tworzenie bardzo ciekawych efektów związanych z przezroczystością i odbiciem. Aby zrealizować efekt przezroczystości musimy się posługiwać na składowych kolorów RGB z zakresu od 0.0f do 1.0f uwzględniając przy tym współczynnik przezroczystości alfa. Wartość kanału alfa również jest z zakresu od 0.0f do 1.0f. glcolor4f (red, green, blue, alfa); Po zdefiniowaniu koloru obiektu, jeśli chcemy uzyskać efekt przezroczystości musimy wykorzystać równanie mieszania kolorów z odpowiednimi parametrami: glblendfunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Po wywołaniu równania mieszania kolorów rysujemy nasz przezroczysty obiekt, który zostanie zmieszany z innymi obiektami, np. tłem, znajdującym się za nim.
Wykorzystanie równania mieszania kolorów Jeśli chcemy wykorzystać równanie mieszania kolorów, musimy włączyć mechanizm mieszania. Odbywa się to za pomocą funkcji glenable z parametrem GL_BLEND. Ważne jest, iż nie możemy włączyć mieszania kolorów, jeśli mamy włączone oświetlenie na scenie. Dlatego przed włączeniem mieszania musimy najpierw wyłączyć oświetlenie, a po zmieszaniu kolorów wyłączyć mieszanie i ponownie włączyć oświetlenie. glcolor4f (1.0f, 0.0f, 0.0f, 0.4f); gldisable (GL_LIGHTING); glenable (GL_BLEND); glblendfunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glutsolidcube (0.3f); gldisable (GL_BLEND); glenable (GL_LIGHTING);
Tworzenie efektu lustrzanego odbicia Uzyskanie efektu odbicia lustrzanego wnosi konieczność w zasadzie narysowania dwa razy wszystkich obiektów użytych na scenie. Jeśli chcemy na przykład uzyskać efekt odbijającej podłogi, która odbija w sobie wszystko, co znajduje się nad nią, musimy narysować tzw. drugi świat. Najpierw rysujemy wszystko, co znajduje się pod podłogą, czyli położenie wszystkich aktorów skalujemy za pomocą funkcji glscalef(1.0f, -1.0f, 1.0f). Przeskalowana powinna również zostać pozycja światła. Oczywiście musimy wcześniej zmienić też domyślne nawinięcie wielokątów za pomocą funkcji glfrontface. Po narysowaniu aktorów pod podłogą do góry nogami, przywracamy domyślne nawinięcie wielokątów, wyłączamy oświetlenie, włączamy mieszanie kolorów i wywołujemy równanie mieszania. Następnie rysujemy naszą podłogę, pamiętając, aby jej składowe kolorów zawierały też składową alfa. Po narysowaniu podłogi wyłączamy mieszanie kolorów, włączamy oświetlenie i rysujemy aktorów już w sposób normalny nad podłogą.
Wykorzystanie efektu drugiego świata if (LUSTRO) { gllightfv (GL_LIGHT0, GL_POSITION, fpozycja_swiatla_pod); // ustawienie światła pod podłogą glpushmatrix (); glfrontface (GL_CW); // zmiana domyślnego nawinięcia gltranslatef(0.0f, -50.0f, 0.0f); glscalef (1.0f, -1.0f, 1.0f); // przeskalowanie położenia wszystkich aktorów Rys_aktorow (0); // narysowanie aktorów pod podłogą glfrontface (GL_CCW); // przywrócenie domyślnego nawinięcia glpopmatrix ();
Wykorzystanie efektu drugiego świata } gldisable (GL_LIGHTING); // wyłączenie oświetlenia glenable (GL_BLEND); // włączenie mieszania kolorów glblendfunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // równanie mieszania kolorów Podloze (); // narysowanie podłogi gldisable (GL_BLEND); // wyłączenie mieszania glenable (GL_LIGHTING); // włączenie oświetlenia gllightfv (GL_LIGHT0, GL_POSITION, fpozycja_swiatla); // ustawienie światła nad podłogą Rys_aktorow (0); // narysowanie aktorów nad podłogą
Opis funkcji glblendfunc funkcja ustala współczynniki kolorów docelowego i źródłowego stosowane w równaniu mieszania kolorów. Mechanizm mieszania kolorów należy włączyć wywołaniem funkcji glenable (GL_BLEND). Domyślne ustawienia mieszania kolorów są równoważnie z wywołaniem funkcji glblendfunc (GL_ONE, GL_ZERO). składnia void glblendfunc (GLenum sfactor, GLenum dfactor); parametry sfactor funkcja mieszania koloru źródłowego dfactor funkcja mieszania koloru docelowego
Literatura Richard S. Wright jr, Michael Sweet: OpenGL Księga eksperta Wydanie III, Helion2005 Pomoce dydaktyczne i instrukcje, http://icis.pcz.pl/~mkubanek Jackie Neider, Tom Davis, Mason Woo: OpenGL Programming Guide The RedBook Kevin Hawkins, Dave Astle: OpenGL. Programowanie gier, Helion 2003 The official OpenGL web page, http://www.opengl.org http://januszg.hg.pl/opengl/