[ Pobierz całość w formacie PDF ]
.5,1,.5)Tak wiêc komponenty koloru materia³u okreœlaj¹ po prostu procent odbijanegoœwiat³a danego rodzaju.W naszym przyk³adzie intensywnoœæ sk³adowej czerwonejœwiat³a otaczaj¹cego wynosi³a 1/2, zaœ w³aœciwoœæ materia³u.5 dotycz¹cask³adowej czerwonej œwiat³a otaczaj¹cego okreœli³a, ¿e tylko po³owa po³owyintensywnoœci zosta³a odbita.Po³owa po³owy to 1/4, czyli 0,25.Rozdzia³ 9.* Oœwietlenie i Ÿród³a œwiat³a_____________________________277Efekty œwiat³a rozpraszaj¹cego i odb³yskówW przypadku œwiat³a otaczaj¹cego by³o to doœæ proste.Œwiat³o rozpraszaj¹cetak¿e posiada intensywnoœci RGB, w podobny sposób wspó³graj¹ce z w³aœciwoœciamimateria³u.Jednak œwiat³o rozpraszaj¹ce ma kierunek, wiêc intensywnoœæ napowierzchni obiektu zmienia siê w zale¿noœci od k¹ta miêdzy t¹ powierzchni¹ akierunkiem Ÿród³a œwiat³a.To samo odnosi siê do intensywnoœci powierzchnioœwietlanych œwiat³em odb³ysków.Ogólny efekt jako wartoœæ RGB jest obliczanytak samo jak w przypadku œwiat³a otaczaj¹cego, gdzie intensywnoœæ Ÿród³aœwiat³a (po zmodyfikowaniu wed³ug k¹ta padania) jest mno¿ona przez wspó³czynnikodbicia œwiat³a dla materia³u.Na koniec, wszystkie trzy wartoœci RGB s¹sumowane w celu otrzymania koñcowego koloru obiektu.Jeœli którakolwiek zintensywnoœci barw sk³adowych przekracza wartoœæ l ,0, jest obcinana do tejwartoœci (nie mo¿na zastosowaæ wiêkszej intensywnoœci ni¿ pe³na!).Ogólnie, sk³adowe otaczaj¹ca i rozpraszaj¹ca Ÿróde³ œwiat³a i materia³Ã³w s¹takie same i maj ¹ najwiêkszy wp³yw na okreœlanie koloru obiektu.Œwiat³aodb³ysków i w³aœciwoœci materia³Ã³w dla odb³ysków najczêœciej s¹ jasnoszare lubbia³e.Sk³adowa odb³ysków przede wszystkim zale¿y od k¹ta padania œwiat³a, zaœodb³yski na powierzchni obiektu zwykle s¹ bia³e.Umieszczenie œwiat³a w scenieByæ mo¿e wydaje ci siê to zbyt du¿¹ iloœci¹ teorii naraz.Zwolnijmy wiêc niecoi zacznijmy poznawaæ przyk³ady kodu OpenGL, potrzebne do w³¹czeniaoœwietlenia; dziêki temu utrwalimy tak¿e to, czego siê dot¹d dowiedzia³eœ.Zademonstrujemy tak¿e pewne dodatkowe w³aœciwoœci i wymagania dotycz¹ceoœwietlenia w OpenGL.Kilka nastêpnych przyk³adów zosta³o zbudowanych napodstawie programu JET.Pocz¹tkowa wersja nie zawiera³a ¿adnego kodu zwi¹zanegoz oœwietleniem i po prostu rysowa³a trójk¹ty przy w³¹czonym buforze g³êbokoœci.Jednak gdy skoñczymy, na metalicznej powierzchni obracanego samolotu bêd¹przesuwaæ siê jasne odblaski s³oñca.W³¹czanie oœwietleniaAby poinformowaæ OpenGL, ¿e ma zacz¹æ obliczaæ oœwietlenie, wywo³aj funkcjêglEnable() z parametrem GL_LIGHTING:glEnable(GL_LIGHTING);Ta pojedyncza instrukcja nakazuje OpenGL, aby przy obliczaniu koloru ka¿degowierzcho³ka w scenie bra³ pod uwagê w³aœciwoœci materia³u i parametryoœwietlenia.Jednak bez okreœlenia w³aœciwoœci materia³u lub Ÿród³a œwiat³atwój obiekt pozostanie ciemny i nieoœwietlony, tak jak pokazano na rysunku 9.6.Spójrz do kodu ka¿dego z przyk³adów opartych na programie JET, a przekonaszsiê, ¿e w ka¿dym z nich, tu¿ po przygotowaniu kontekstu renderowania, jestwywo³ywana funkcja SetupRC().W³aœnie tam odbywa siê inicjowanie wszelkichparametrów oœwietlenia.278__________________ ___ Czêœæ II » U¿ywanie OpenGLRysunek 9.6.Program 2 w³¹czonym oœwietleniem, jednak bez zdefiniowania parametrówoœwietlenia i w³aœciwoœci materia³Ã³wPrzygotowanie modelu oœwietleniaPo w³¹czeniu obliczania oœwietlenia, pierwsze, co musisz zrobiæ, to przygotowaæmodel oœwietlenia.Trzy parametry okreœlaj¹ce model oœwietlenia s¹ ustawiane zapomoc¹ funkcji glLightModel().Pierwszym parametrem oœwietlenia, u¿ywanym w naszym nastêpnym przyk³adzie, jestGL_LIGHT_MODEL_AMBIENT.Umo¿liwia okreœlenie globalnego œwiat³a otaczaj¹cego,oœwietlaj¹cego wszystkie obiekty ze wszystkich stron.Poni¿szy kod okreœlau¿ycie jasnego, bia³ego œwiat³a:// Jasne bia³e œwiat³a = pe³na intensywnoœæ wszystkich sk³adowych RGB GLfloatambientLightU = f l.Of, l.Of, l.Of, 1.0 } ;// W³¹czenie œwiat³a glEnable(GL_LIGHTING);// Ustawienie modelu oœwietlenia tak aby korzysta³ ze œwiat³aotoczenia// okreœlonego w ambientLight[] glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambientLight);Pokazana tu odmiana funkcji glModelLight, glModelLightfy, jako pierwszyparametr otrzymuje ustawiany lub modyfikowany parametr modelu oœwietlenia, ajako drugi - tablicê wartoœci RGBA sk³adaj¹cych siê na œwiat³o.Domyœlnewartoœci RGBA globalnego œwiat³a otaczaj¹cego to (0,2, 0,2, 0,2, 1,0), czylidoœæ ciemne.Inne parametry modelu oœwietlenia umo¿liwiaj¹ wskazanie, czy s¹oœwietlane przednie, tylne czy obie strony wielok¹tów, a tak¿e k¹ty dlaobliczania oœwietlenia rozproszonego i odb³ysków.Wiêcej informacji na temattych parametrów znajdziesz w sekcji podrêcznika.Rozdzia³ 9.» Oœwietlenie i Ÿród³a œwiat³a_____________________________279Przygotowanie w³aœciwoœci materia³uGdy mamy ju¿ Ÿród³o œwiat³a otaczaj¹cego, musimy tak ustawiæ w³aœciwoœcimateria³Ã³w, aby wielok¹ty odbija³y œwiat³o i ¿ebyœmy widzieli samolot.Spójrzna poni¿szy fragment kodu:GLfloat gray[] = { 0.75f, 0.75f, 0.75f, l.Of };glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gray);glBegin(GL_TRIANGLES);glVertex3f(-15.Of, O.Of, 30.Of);glVertex3f(O.Of, 15.Of, 30.Of);glVertex3f(O.Of, O.Of, -56.Of); glEnd();Pierwszy parametr funkcji glMaterialfy okreœla, czy bêd¹ ustawiane w³aœciwoœciprzedniej (GL_FRONT), tylnej (GL_BACK) czy obu stron materia³u (GL_FRONT_AND_BACK).Drugi parametr informuje o ustawianej w³aœciwoœci; w tym przypadkuwspó³czynniki odbicia œwiat³a rozpraszaj¹cego i otaczaj¹cego s¹ ustawiane natak¹ sam¹ wartoœæ.Ostatnim parametrem jest tablica zawieraj¹ca wartoœci RGBAokreœlaj¹ce dan¹ w³aœciwoœæ.Wszystkim prymitywom stworzonym po wywo³aniufunkcji glMaterial bêd¹ nadawane ostatnio ustawione w³aœciwoœci, a¿ do momentuinnego wywo³ania funkcji glMaterial.W wiêkszoœci sytuacji sk³adowe rozpraszaj¹ca i otaczaj¹ca s¹ takie same, adopóki nie chcesz odb³ysków (iskier, lœni¹cych miejsc), nie musisz definiowaæich w³aœciwoœci.Jednak nawet mimo to doœæ ¿mudne by³oby przygotowywanietablicy dla ka¿dego koloru w naszym modelu i wywo³ywanie funkcji glMaterial()przed ka¿dym wielok¹tem czy grup¹ wielok¹tów.To prowadzi nas do drugiej i zalecanej metody ustalania w³aœciwoœci materia³Ã³w,zwanej œledzeniem kolorów.W przypadku œledzenia kolorów informujesz OpenGL,aby ustawia³o w³aœciwoœci materia³u w momencie wywo³ywania funkcji glColor
[ Pobierz całość w formacie PDF ]