OpenGL - Rozdziały (Helion)

Embed Size (px)

Citation preview

4.Obiekty podstawowe ................................................................. 3kozdz|o 5. Ko|or, moIer|oy | ow|eI|en|e. FodsIowy..............................Punkt 3kozdz|o 5. Ko|or, moIer|oy | ow|eI|en|e. FodsIowy.............................. 221................. 222 Czym jest kolor?...............................................................................................................wiato jest fal ........................................................................................................................... 222wiato jako czsteczka............................................................................................................... 222Nasz osobisty wykrywacz fotonw............................................................................................. 224Komputer generatorem fotonw.................................................................................................. 224Sprzt komputerw PC...................................................................................................................... 225Tryby graficzne komputerw PC....................................................................................................... 227Rozdzielczo ekranu.................................................................................................................. 227Gbia kolorw............................................................................................................................ 227Uywanie kolorw w OpenGL.......................................................................................................... 229Szecian kolorw......................................................................................................................... 229Ustalanie koloru rysowania ......................................................................................................... 230Cieniowanie................................................................................................................................. 231Ustalanie modelu cieniowania..................................................................................................... 233Kolory w wiecie rzeczywistym........................................................................................................ 234wiato otaczajce ....................................................................................................................... 235wiato rozproszone .................................................................................................................... 235wiato odbite.............................................................................................................................. 235A teraz wszystko razem............................................................................................................... 236Materiay w wiecie rzeczywistym.................................................................................................... 237Waciwoci materiaw.............................................................................................................. 237Dodawanie wiata do materiaw............................................................................................... 237Wyliczanie efektw owietlenia otoczenia.................................................................................. 238Efekty wiata rozproszenia i odbitego........................................................................................ 238Dodawanie wiate do sceny.............................................................................................................. 239Wczenie owietlenia................................................................................................................. 239Konfigurowanie modelu owietlenia........................................................................................... 239Ustalanie waciwoci materiaw............................................................................................... 240Uywanie rde wiata.................................................................................................................... 243Gdzie jest gra?........................................................................................................................... 244Normalne powierzchni ................................................................................................................ 244Definiowanie normalnej .............................................................................................................. 245Normalne jednostkowe................................................................................................................ 247Znajdowanie normalnej ............................................................................................................... 248Konfigurowanie rda................................................................................................................ 249Ustalanie waciwoci materiaw............................................................................................... 250Definiowanie wieloktw............................................................................................................ 251Efekty wietlne .................................................................................................................................. 252Odbyski ...................................................................................................................................... 253wiato odbite.............................................................................................................................. 253Wspczynnik odbicia ................................................................................................................. 254Wykadnik odbysku ................................................................................................................... 255Urednianie normalnych.............................................................................................................. 256A teraz wszystko razem..................................................................................................................... 258Tworzenie reflektora ................................................................................................................... 259Rysowanie reflektorw................................................................................................................ 261Spis treciCienie ................................................................................................................................................ 265Czym jest cie? ........................................................................................................................... 266Kod prasujcy.............................................................................................................................. 267Przykad z cieniem...................................................................................................................... 268Ponowna wizyta w wiecie kul.................................................................................................... 271Podsumowanie................................................................................................................................... 271Opisy funkcji ..................................................................................................................................... 272Spis treciRozdzia 6.Mylenie niekonwencjonalne programy do cieniowania................. 241GLSL 101 ..................................................................................................................................... 242Zmienne i typy danych...................................................................................................... 243Kwalifikatory zmiennych.................................................................................................. 246Prawdziwy shader ............................................................................................................... 248Kompilowanie, wizanie i konsolidowanie.................................................................... 252Praktyczne wykorzystanie shadera.................................................................................. 258Wierzchoek prowokujcy................................................................................................ 259Dane uniform shadera.............................................................................................................. 259Znajdowanie danych uniform.......................................................................................... 260Zmienne uniform skalarne i wektorowe ......................................................................... 260Tablice uniform.................................................................................................................. 261Macierze uniform............................................................................................................... 262Paski shader ........................................................................................................................ 262Funkcje standardowe................................................................................................................ 265Funkcje trygonometryczne............................................................................................... 265Funkcje wykadnicze.......................................................................................................... 266Funkcje geometryczne....................................................................................................... 267Funkcje macierzowe ........................................................................................................... 267Funkcje porwnywania wektorw................................................................................... 267Inne czsto uywane funkcje............................................................................................ 267Symulowanie wiata ................................................................................................................. 272wiato rozproszone........................................................................................................... 272Shader wiata rozproszonego.......................................................................................... 274Model owietlenia ADS..................................................................................................... 278Cieniowanie Phonga.......................................................................................................... 281Korzystanie z tekstur ................................................................................................................. 285Nic, tylko teksele ................................................................................................................. 285Owietlanie tekseli.............................................................................................................. 287Anulowanie przetwarzania fragmentw......................................................................... 289Teksturowanie w stylu kreskwkowym teksele w roli wiata ................................ 292Podsumowanie ........................................................................................................................... 294Rozdzia 9.Zaawansowane odwzorowania tekstur.................................................. 237Tekstury wielokrotne................................................................................................... 237Sprawdzanie dostpnoci tekstur wielokrotnych ....................................................... 238Dostp do funkcji rozszerze.................................................................................. 239Tworzenie jednostek tekstury................................................................................. 240Okrelanie wsprzdnych tekstury ......................................................................... 241Przykad zastosowania tekstur wielokrotnych........................................................... 242Odwzorowanie otoczenia ............................................................................................. 250Torus na niebie...................................................................................................... 250Macierze tekstur.......................................................................................................... 253Mapy owietlenia ........................................................................................................ 255Stosowanie map owietlenia................................................................................... 255Wieloprzebiegowe tekstury wielokrotne........................................................................ 261Podsumowanie............................................................................................................ 26574Rozdzia 4. Obiekty podstawowePunktPunktstanowinajwaniejszyelementkadejrysowanejsceny.WszystkieobiektyrysowanezapomocprocedurOpenGLszbudowane z punktw. Punkty te mog wyznacza wierzchokiobiektw (linia, trjkt) lub stanowi wypenienie tych obiektw.Zapomocpunktwmonarwnierysowawykresyfunkcjimatematycznychczytedowolnefiguryuoonezkolejnychpunktw.Abywyznaczypooeniepunktuijegowielko,wykorzystuje si specjalne procedury OpenGL. Bardzo wanymzagadnieniemjestwzajemnazalenopomidzypunktemry-sowanymwOpenGLapikselem.Pikseljestnajmniejszymob-szaremekranu,jakimoeprzyrozdzielczociokrelonejpara-metramidanejkartygraficznejwdanejchwilibyzapalony(zgaszony).Narozmiarpikselaprogramistaniemaadnegowpywu (pozazmianrozdzielczociekranu).Punktnatomiastposiadarozmiarokrelonywielkocipaszczyznyrzutowaniai zadeklarowan wielkoci. Domyln wielkoci punktu jest 1(jeden),conieoznaczawcale,enaekraniebdzieonodpo-wiadajednemupikselowi.Wprzypadkuzmianyrozmiarupaszczyznyrzutowaniazmienisirwnierozmiarwywie-tlanegopunktuowielkocijednostkowej(moewynosikilkalubkilkanaciepikseli).Zagadnienietojestszczeglnieistotneprzyimporcieobrazkw,jakrwniepodczaswykorzystywa-nia bitmap, ktrych wymiary s okrelane w pikselach. Rezultatnieskorelowaniawymiarwoknagrafikiipaszczyznyrzuto-wania przedstawia rysunek 4.1.Rozdzia 4. Obiekty podstawowe | 75Rysunek 4.1. Zaleno wymiarw wywietlania obiektu, ktregowymiary okrelane s w pikselach i w punktachObrazekzlewejstronyzostawykonanyzwykorzystaniemprocedury glDrawPixels(), tzn.narysowanogopikselami,na-tomiast ten z prawej strony jest tekstur naoon na kwadrato takich samychwymiarach,aleokrelonychwpunktach.Wy-miary obrazka wynosz128na128pikseli,wymiarykwadratu128na128punktw.OknografikiokreloneprocedurglViewPort() ma wymiary 600 na 600 pikseli, a wymiary pasz-czyznyrzutowaniazdefiniowaneprocedurglOrtho()wyno-sz 400 na 400 punktw. Jak wynika z przedstawionego rysunku,proporcje pomidzyrzeczywistymi rozmiarami rysunkuaobiek-temotychsamychwymiarach,alewyraonychwinnychjed-nostkach,soczywiste.Zpowyszegowywoduwynikawicjasno, e piksel to nie to samo co punkt.glPointSize()Deklaracja: procedure glPointSize(Grubo : GLFloat);Dziaanie: ustala now wielko rysowanych punktw.76 | OpenGL. Leksykon kieszonkowyUwagaNowawielkorysowanychpunktwbdzietakasamadlawszystkichpunktwrysowanychpojejustaleniu.Abyprzywrci domyln wielko punktu 1 (jeden), naley po-nowniewywoaprocedurglPointSize(),zparametremGrubo rwnym 1 (jeden).glPointSize(5); // Punkt o wielkoci 5 jednostekglPointSize(1); // Powrt do wielkoci domylnejglVertex*()Deklaracja: procedure glVertex2*(x, y, z, w : GL**[PGL**]);lub procedure glVertex3*(x, y, z, w : GL**[PGL**]);lub procedure glVertex4*(x, y, z, w : GL**[PGL**]);UwagaZnak*(gwiazdka)tojednoz:d,f,i,s,dv,fv,ivlubsv.Dwuznak ** (dwie gwiazdki) to odpowiednio: Double, Float,Int lub Short.Dziaanie: rysuje wierzchoek (punkt) na paszczynie rzutowania,w miejscu okrelonym parametrami wywoania. Tworzenie takichobiektwjaklinie,wieloktyitp.odbywasizapomocokre-leniapooeniaichwierzchokwwprzestrzeni.Cyfraprzy-rostkaokrelaliczbwymiarw wprzestrzeni, wktrejbdzieumieszczonywierzchoek.Literavoznacza,eparametrydoprocedury bd przekazane w postaci tablicy (wektora). Najcz-ciejproceduratajestwywoywanawpostaci:glVertex3f().Naleywtymmiejscuwspomnie,eliczbytypuDouble(GLDouble)iSingle(GLFloat)sbezkonwersjiakceptowaneprzezkoprocesormatematyczny(CPU)iztegotewzgldunaleyz nichkorzysta,oczywiciejeeliinnewzgldynieRozdzia 4. Obiekty podstawowe | 77wymuszajstosowaniainnegotypuliczb.Wpowyszymprzy-kadzieuwzgldnionoprocedurglPointSize(),ktraokrelawielko rysowanych punktw na ekranie. Jeeli nie wywoamytejprocedury,towszystkiepunktybdmiaydomylnwiel-korwn1(jeden).Dlapunktw,podobniejakdlainnychobiektw,monawykorzystanarzdziedowygadzaniakra-wdzi,czylitzw.antialiasing.Wraziezwikszeniarozmiarwpunktu okae si, e ma on ksztat kwadratu, co nie zawsze jestpodane.Abytegounikn,wystarczywywoaprocedurglEnable() zparametremGL_POINT_SMOOTH,cospowoduje,enaronikizostanzaokrglone.Naleypamitaowywoaniuprocedury glDisable(GL_POINT_SMOOTH), jeeli kolejne punktymajbyrysowanebezwygadzania.Wczaniewygadzaniadla punktw o domylnej wielkoci 1.0 jest bezcelowe i nie na-ley go stosowa. Poniej przedstawiono fragment kodu, ktregowykonaniepowodujenarysowaniepunktubezwygadzaniai z wygadzaniem:// Punkt glColor3f(0.0, 0.0, 1.0); // Kolor niebieski// Punkt bez wygadzania glPointSize(95); // Wielko punktu(95 pikseli); glBegin(GL_POINTS); // Rysowanie punktwglVertex3f(0, 0, 0); // Pooenie punktu(rodek oknagrafiki OpenGL) glEnd; // Koniec rysowania// Punkt wygadzony glEnable(GL_POINT_SMOOTH); // Wczenie wygadzania (antialiasing) punktu glPointSize(95); glTranslatef(100, 0, 0); glBegin(GL_POINTS);glVertex3f(0, 0, 0); glEnd; glDisable(GL_POINT_SMOOTH); // Wyczenie wygadzaniapunktuRezultatdziaaniapowyszegofragmentukoduilustrujery-sunek 4.2.78 | OpenGL. Leksykon kieszonkowyRysunek 4.2. Punkt o wielkoci 95 jednostek bez wygadzania i po wczeniuwygadzaniaUwagaDomylnie wygadzanie jest wyczone, a to ze wzgldu nabardzo znaczcespowolnieniepracyprogramu.Przedw-czeniem wygadzania naley przeanalizowakoniecznojegouycia i wyczy, jeeli przestaje by faktycznie niezbdne.4Q\F\KC-QNQTOCVGTKC[KQYKGVNGPKG2QFUVCY[#WVQT4KEJCTF59TKIJV,T%\GIQPCWE\[O[UKYV[OTQ\F\KCNG!Jok Funkcje, z ktrych bqdz|emy korzystocUstala kolor na podstawie skadowych RGB _!Co!orUstala model cieniowania _!ShaceMoce!Ustala model owietlenia _!|:_h!Moce!Ustala parametry owietlenia _!|:_h!Skonfigurowa odblaskowe waciwoci materiaw _!Co!orMa!er:a!/_!Ma!er:a!Stosowa normalne powierzchni _!Norma!W niniejszym rozdziale grafika trjwymiarowa w kocu zacznie wyglda interesujco(chyba e kto bardzo lubi modele szkieletowe), a w kadym nastpnym bdzie coraz lepiej.DotejporyuczylimysibibliotekiOpenGLodjejpodstawjakmonabudowaprogramy,jakwprzestrzenitrjwymiarowejskadaobiektyzobiektwpodstawo-wych, jak manipulowa tymi obiektami w trzech wymiarach. Cay czas kadlimy tylkofundamenty, ale nadal nie wiemy, jak bdziewyglda cay budynek! Parafrazujc fraz:Gdzie jest arcie?.Krtkomwicarciezaczynasitutaj.Wwikszocipozostaejczcitejksikinauka zostanie odsunita na plan dalszy, a wadz przejmie magia. Zgodnie ze sowamiArthura C. Clarkea kada wystarczajco rozwinita technologia jest nie do odrnieniaod magii. Oczywicie w kolorach i owietleniu nie ma adnej magii, cho czasami monaodnie inne wraenie. Jeeli ktokolwiek jest zainteresowany t wystarczajco rozwinittechnologi, czyli matematyk, to odsyamy do dodatku A.Alternatywn nazw tego rozdziau mogoby by Dodawane do sceny realizmu. W wie-cie rzeczywistym na kolor obiektu wpywa duo wicej czynnikw ni proste naoeniekoloru znane z biblioteki OpenGL. Obiekty, poza tym, e maj jaki kolor, mog by ma-towe lub byszczce, a nawet wieci wasnym wiatem. Widziany kolor obiektu moe224 Cz IKlasyka OpenGLbyinnywjasnymowietleniuniwwietleprzytumionym.Znaczeniematekolorpadajcego na obiekt wiata. Owietlony obiekt moe mie te cieniowane powierzchnie,jeeli owietlany bdzie pod odpowiednim ktem.%\[OLGUVMQNQT!Pomwmy przez chwil o samych kolorach. W jaki sposb widzimy kolory? Jak s onetworzonewnaturze?Teoriakolorwimetodyodbieraniakolorwprzezludzkieokobardzo uatwi nam zrozumienie programowychmetod tworzenia barw. Jeeli kto judoskonale zna tajniki teorii kolorw, spokojnie moe pomin ten podrozdzia.YKCVQLGUVHCNKolor jest po prostu fal wietln o pewnej dugoci, widoczn dla ludzkiego oka. Kady,ktowszkoleuwaanalekcjachfizyki,zapewnepamita,ewiatojestjednoczeniezarwno fal, jak i czsteczk. wiato modelowane jest jako fala przemieszczajca siprzezprzestrze, jakfalenawodzie,aletakejakoczsteczki,padajcenaziemiejakkrople deszczu. Jeeli komu ta koncepcja wydaje si pogmatwana, to chyba ju rozumie,dlaczego tak niewiele osb studiuje fizyk kwantow.wiato,jakiewidzimy,taknaprawdjestmieszankwielurnychrodzajwwiata.Kady rodzaj wiata identyfikowany jest dugocifali. Dugo faliwiatamierzonajest odlegoci pomidzy dwiema kolejnymi wartociami szczytowymi, tak jak pokazanoto na rysunku 5.1.kysunek 5.1.Pomiar dugocifali wietlnejwiato widzialne mieci si w zakresie dugoci fal od 390 nanometrw (miliardowychczci metra) dla wiata fioletowego, do 720 nanometrw dla wiata czerwonego. Tenzakres nazywany jest czsto spektrum wiata widzialnego. Z ca pewnoci kady syszaju okrelenia ultrafiolet i podczerwie opisuj one wiato niewidzialne dla ludzkiegooka, lece tu poza podanym powyej spektrum. Cae spektrum widzialne zawiera w sobiewszystkie kolory tczy (tak jak na rysunku 5.2).YKCVQLCMQE\UVGE\MCMona sobie pomyle: Dobra, panie mdrala, jeeli kolor jest tylko dugoci fali wiata,awszystkiemoliwekolorywidoczneswtczy,togdziewtakimraziepodziasibrz z czekolady, czer mojej porannej kawy albo biel kartki papieru? Odpowied na tepytania zaczniemy od stwierdzenia, e czer nie jest kolorem, podobnie jak i biel. TakRozdzia 5.Kolor, materiay i owietlenie. Podstawy 225kysunek 5.2. Spektrum wiat widzialnegonaprawd czer jest barkiem jakiegokolwiek koloru, a biel to rwnomierna kombinacjawszystkich kolorw. Oznacza to, e biay obiekt odbija wszystkie kolory w jednakowy spo-sb, natomiast obiekt czarny tak samo rwno pochania wszystkie dugoci fali wietlnej.Jeeli chodzi o brz czekolady, jak rwnie inne kolory, z jakimi spotykamy si w yciu,to rzeczywicie jest on kolorem. Kolory rzeczywiste skadaj si one z rnych mieszanekczystych kolorw widzialnego spektrum, w zwizku z czym pod wzgldem fizycznym sone kolorami zoonymi. eby zrozumie, jak dziaa takie mieszanie kolorw, trzeba myleo wietle jako o czsteczkach. Kady owietlony obiekt bombardowany jest miliardami, mi-liardami (tutaj musz przeprosi Carla Sagana) fotonw, czyli malekich czsteczek wiata.Przypomnijmy sobie ten fizyczny hokus-pokus, o ktrym mwilimy wczeniej kadyfoton jest rwnie fal posiadajc pewn dugo, czyli konkretny kolor ze spektrum.Kady obiekt fizyczny skada si z atomw. Sposb odbicia fotonw od obiektu uzalenionyjest od rodzaju atomw, z jakich si on skada, liczby kadego rodzaju atomw, a takeich uoenia (razem z elektronami) wewntrz obiektu. Cz fotonw jest odbijana, a czpochaniana (pochaniane fotony s zamieniane w ciepo). Kady materia lub mieszankamateriawlepiejodbijapewnedugocifalniinne.Zasadatazostaaprzedstawionana rysunku 5.3.kysunek 5.3.Kady obiekt odbijacz fotonw, a czz nich pochania226 Cz IKlasyka OpenGL0CU\QUQDKUV[Y[MT[YCE\HQVQPYwiato odbite od naszej tabliczki czekolady wpada do naszego oka, gdzie jest interpreto-wane jako kolor. Miliardy fotonw wpadajcych do naszego oka skupiane s w jego czarnejczci,gdziesiatkwkadziaanazasadziepodobnejdokliszyfotograficznej.Milionykomrek siatkwki pobudzanych jest przez uderzajce w nie fotony, co powoduje, e domzgu zaczynaj wdrowa sygnay nerwowe, ktre s nastpnie interpretowane jako wia-to i kolor. Im wicej fotonw uderza w siatkwk, tym bardziej pobudzone s jej komrki.Poziom pobudzenia interpretowany jest w mzgu jako jasno wiata. Wynika to z prostejzalenoci im janiejsze jest wiato, tym wicej fotonw wpada do naszego oka.W naszym oku znajduj si trzy rodzaje komrek. Wszystkie reaguj na uderzenia foto-nw, ale kady rodzaj najmocniej reaguje na fale o okrelonej dugoci. Jedne komrkipobudzaneswiatemczerwonym,drugiewiatemzielonym,atrzeciewiatemnie-bieskim. Tak wic wiato skadajce si gwnie z czerwonych dugoci fal najbardziejpobudza w siatkwce komrki reagujce na wiato czerwone, a mniej pozostae. Naszmzg przetwarza takie sygnay, stwierdzajc, e widziane wiato jest przede wszystkimczerwone.A teraz prostamatematyka czenie rnychdugocifalwietlnychood-miennych intensywnociach da nam w wyniku rne mieszanki kolorw. Jeeli wszyst-kiefalebdmiayidentycznintensywno,totakiewiatobdziemyodbierajakobiae.Jeelinatomiastniezobaczymyadnychfalwietlnych,tozinterpretujemytenstan jako czer.Jak wida, kady odbierany przez nasze oczy kolor jest w rzeczywistoci mieszaninwiata z caego widzialnego spektrum. Sprztowe elementy naszego okawykrywajobrazy na podstawie wzgldnego skupienia i natenia wiata czerwonego, zielonegoi niebieskiego. Na rysunku 5.4 przedstawiono sposb, w jaki nasze oko odbiera kolorbrzowy,czylimieszank60%fotonwczerwonych,40%fotonwzielonychi10%niebieskich.kysunek 5.4.Jak nasze oko widzikolor brzowy-QORWVGTIGPGTCVQTGOHQVQPYSkorowiemyju, jakludzkieokorozpoznajekolory,cakiemrozsdnymwydajesipomys komputerowego generowania kolorw poprzez definiowanie oddzielnych inten-sywnoci skadowych czerwonej, zielonej i niebieskiej. Tak si akurat skada, e moni-torykomputerwzaprojektowaneswsposbpozwalajcyimemitowatrzyrodzajewiata (zgadnijcie jakie), z ktrych kady moe mie inn intensywno. W tylnej czciRozdzia 5.Kolor, materiay i owietlenie. Podstawy 227monitoraznajdujesidziaoelektronowewyrzucajceelektronynatylnczekranumonitora. Na powierzchni tego ekranu znajduj si materiay fosforyzujce, ktre w czasiebombardowania strumieniem elektronw zaczynaj emitowa wiato czerwone, zielonelub niebieskie. (No dobra, ale jak w takim razie dziaaj wywietlacze LCD? Znalezienieodpowiedzi na to pytanie pozostawimy Czytelnikowi jako prac domow). Te trzy fos-foryzujce materiay uoone s bardzo blisko siebie, tak e razem tworz jedn barwnplamk na ekranie (rysunek 5.5).kysunek 5.5.Jak monitorkomputerowy generujekoloryProsz sobie przypomnie, jak w rozdziale 2., Uywanie OpenGL, opisywalimy po-lecenieCccrpozwalajcenadefiniowaniekolorwpoprzezpodanieintensywnociskadowych czerwonej, zielonej i niebieskiej.5RT\VMQORWVGTY2%By taki czas, kiedy najnowoczeniejsz kart graficzn dla komputerw PC bya kartaHercules. Karta pozwalaa na tworzenie bitmapowych obrazw o rozdzielczoci 720348punktw.Jejwadbyoto,ekadyzpunktwmgmietylkodwastany:zapalonylub zgaszony. W tym czasie tworzenie bitmapowej grafiki na komputerach PC nie byozadaniem atwym, chotworzonebyywspaniaemonochromatyczneobrazynawettrjwymiarowe!Jeszcze przed powstaniem kart Hercules dostpne byy karty CGA (ang. Color GraphicsAdapter). Karta powstaa razem z pierwszymi komputerami IBM PC moga obsugiwarozdzielczo 320200 pikseli i wywietla na ekranie 4 lub 16 kolorw naraz. Dostpnabya te wysza rozdzielczo (640200) z dwoma kolorami, ale nie bya ona tak efek-towna, jakw znacznie taszej karcie Hercules(monitorykoloroweoznaczayznaczniewysze koszty). Jak na dzisiejsze standardy karta CGA wyglda mizernie. Jej graficznemoliwoci prezentoway si nie najlepiej nawet w porwnaniu z moliwociami tanichkomputerw Commodore 64 i Atari. Ze wzgldu na brak wystarczajcych rozdzielczoci228 Cz IKlasyka OpenGLobrazu karta nie nadawaa si do tworzenia grafiki biznesowej ani nawet modelowania.Najczciej znajdowaa zastosowaniew prostychgrach i aplikacjachbiznesowych,ktremogy najwicej skorzysta na moliwoci wywietlania kolorowego tekstu. Mwic ogl-nie, trudno byo znale dobry powd, eby kupi t nietani wtedy kart.Nastpna rewolucja w grafice komputerw PC nastpia, gdyfirma IBM zaprezentowaakart EGA (ang. Enhanced Graphic Adapter). Udostpniaa ona dodatkowe tryby tekstowe,wktrychmoliwebyowywietlaniewikszejliczbyni25liniikolorowegotekstu,a w trybie graficznym mona byo uzyska rozdzielczo 640350 pikseli w 16 kolorach!Inne poprawki techniczne wyeliminoway problemy z migotaniem obrazu w karcie CGAi umoliwiy tworzenie lepszej i pynniejszej animacji. Od tego momentu gry platformowe,graficzneaplikacjebiznesowe,anawetprostegrafikitrjwymiarowestaysiczymnormalnym w wiecie komputerw PC. By to ogromny krok w stosunku do kart CGA, alegrafika w komputerach PC nadal pozostawaa w powijakach.Ostatnim wanym standardem, jaki wrd komputerw PC wyznaczya firma IBM byakarta VGA (skrt ten oznacza Vector Graphics Array, a nie, jak si powszechnie uwaa,Video Graphics Adapter). Karta bya o wiele szybsza ni EGA, pozwalaa stosowa 16kolorw w wysokich rozdzielczociach (640480), a w mniejszych (320200) nawet265kolorw,ktrebyywybieranezpaletyobejmujcejponad16milionwkolorw.W ten sposb otwarty zosta worek z graficznymi aplikacjami dla komputerw PC naglemoliwe stao si tworzenie niemal fotorealistycznych obrazw, a na rynku pojawiy siprogramydoledzeniapromieni(raytrace),grytrjwymiarowe,oprogramowaniedoobrbki zdj i inne.Firma IBM posiadaa jeszcze inn, znacznie bardziej zaawansowan kart graficzn dlaswoich stacji roboczych 8514. Moga ona wywietla obraz o rozdzielczoci 1024768w 256 kolorach. Wedug firmy IBM ta karta miaa by uywana wycznie w aplikacjachCADinaukowych,jednakkliencizawszebdchcieliczegowicej.Byatokrtko-wzroczno, ktra firm IBM kosztowaa pozycj ustanawiajcego standardy rynku graficz-negokomputerwPC.InnidostawcyzaczlitworzykartySuper-VGA,ktremogywywietla obraz w rozdzielczoci 1024768 i wikszej w coraz szerszej palecie kolorw.Na pocztku byo to 800600, pniej 1024768 i wicej, pocztkowo w 256, a pniejw32 000i65 000kolorw.Dzisiejszekartygraficznewywietlajobrazyorozdziel-czoci1024768iwikszej,stosujc24-bitowpaletkolorw.Takiekartygraficznedostpne s ju nawet w najprostszych konfiguracjach komputerw.To wszystko daje nam naprawd ogromne moliwoci na przykad tworzenie fotoreali-stycznej grafiki trjwymiarowej, eby wymieni tylko jedno zastosowanie. Gdy MicrosoftprzenisbibliotekOpenGLnasystemWindows,umoliwiwtensposbtworzeniewysokiej jakociaplikacjigraficznych dlakomputerw PC. Jeeli poczymywydajnodzisiejszych procesorw z moliwociami kart graficznych wyposaonych w akceleratorygrafiki trjwymiarowej, to uzyskamy moliwoci, jakie jeszcze kilka lat temu dostpnebyy wycznie na stacjach roboczych wartych setki tysicy dolarw. A to wszystko zapromocyjncenkomputerawsupermarkecie.Dzisiejszedomowekomputerymogtworzy zaawansowane symulacje naukowe, gry i duo, duo wicej. Ju dzisiaj terminrzeczywistowirtualnawydajesiprzestarzayjakrakietaBuckaRogersa,agrafikatrjwymiarowa wydaje si nam czym absolutnie oczywistym.Rozdzia 5.Kolor, materiay i owietlenie. Podstawy 2296T[D[ITCHKE\PGMQORWVGTY2%Systemy operacyjne Microsoft Windows iApple Macintosh pod dwomawzgldami zre-wolucjonizowaywiatgrafikikomputerwPC.Popierwsze,utworzyynajwaniejszegraficzne rodowiska systemw operacyjnych wykorzystywanych w biznesie, a wkrtcepotem rwnie na rynku konsumenckim. Po drugie, znaczco uatwiy prac programistwgrafiki. Sprzt graficzny poddany zosta wirtualizacji na poziomie sterownikw. Pro-gramiciniemuszjuwysyapolecerysujcychbezporedniodokartgraficznych.Korzystaj ze specjalnych interfejsw programistycznych (takich jak OpenGL), a sprawamikomunikacji ze sprztem zajmuje si ju system operacyjny.4Q\F\KGNE\QGMTCPWWdzisiejszychkomputerachstosowanesrozdzielczociekranwod640480do16001200,anawetwicej.Najniszerozdzielczoci,takiejak640480uznawanesza odpowiednie dla pewnych zada graficznych, a osoby z problemami ze wzrokiem sto-suj te rozdzielczoci (czsto w poczeniu z duymi monitorami), co uatwia im pracz komputerem. Zawsze trzeba mie na uwadze wielko okna i ustawienia widoku (roz-dzia 2.), w ktrym wywietlana bdzie przestrze ograniczajca. Zrwnujc wielkorysunku z wielkoci okna, bardzo atwo mona dostosowywa si do rnych kombinacjiwielkocioknairozdzielczociekranu.Dobrzenapisaneaplikacjewywietlajmniejwicej taki sam obraz niezalenie od rozdzielczoci ekranu. Oczywicie im wiksza bdzierozdzielczo, tym dokadniejszy obraz powinien zobaczy uytkownik.)DKCMQNQTYJeeli powikszenie rozdzielczoci ekranu, czyli liczby dostpnych do rysowania pikseliwpywanapoprawdokadnociiostrociobrazu,towpodobnysposbzwikszenieliczby dostpnych kolorw powinno poprawia przejrzysto generowanego obrazu. Obrazwywietlany przez komputer, ktry moe posugiwa si milionami kolorw, powinienwyglda o wiele lepiej ni ten sam obraz wywietlany za pomoc zaledwie 16 kolorw.Pod wzgldem programowym zajmowa bdziemy si zaledwie trzema gbiami kolorw:4-bitow, 8-bitow i 24-bitow.Iryb ko|oru 4-b|towegoW najgorszym przypadku nasz program bdzie musia dziaa w zaledwie 16 kolorach ten tryb nazywany jest 4-bitowym, poniewa kolor kadego piksela reprezentowany jestzapomocczterechbitw.Monawnichzapisawartociod0do15,ktrebdin-deksem w 16-elementowym zbiorze predefiniowanych kolorw (taki ograniczony zbirkolorw, do ktrych mona odwoywa si za pomoc indeksw, nazywany jest paletkolorw).Posiadajczaledwie16kolorw,niemamyzbytwielkichmoliwocitwo-rzenia dokadnego i ostrego obrazu. Najczciej zupenie bezpiecznie mona cakowiciezignorowa tryb 4-bitowy w naszych programach, tym bardziej, e wikszo najnowszychkart graficznych nie obsuguje ju adnego trybu 4-bitowego koloru.230 Cz IKlasyka OpenGLIryb ko|oru 8-b|towegoTryb koloru 8-bitowego pozwala wywietla na ekranie 256 kolorw. Nadal jest to dopowane ograniczenie, cho poprawawstosunkudotrybu4-bitowegojest znaczca.Wikszo akceleratorw graficznych wsppracujcych z bibliotek OpenGL nie przy-spiesza dziaa na 8-bitowych kolorach, ale stosujc rendering programowy mona w pew-nychwarunkachuzyska satysfakcjonujcewyniki. Najwikszym problemem jesttutajzbudowanie prawidowej palety kolorw. Ten temat bdziemy krtko omawia w rozdziale13., Wiggle. OpenGL w systemie Windows.Iryb ko|oru 24-b|towegoDzisiaj moliwie najlepszy obraz uzyskiwany jest w trybie koloru 24-bitowego. W tym try-bie kolor kadego piksela definiowany jest za pomoc penych 24 bitw, w ktrych kade8 bitw opisuje intensywno skadowej czerwonej, zielonej i niebieskiej (8+8+8 = 24).Na ekranie moemy umieci piksel w dowolnym z ponad 16 milionw kolorw. Dooczywist wad tego trybu jest ilo pamici, jaka jest potrzebna do zapisania wyglduekranwowikszychrozdzielczociach(dlarozdzielczoci1024768bdzietoniecoponad 2 MB). Poza tym przenoszenie duych wycinkw pamici rwnie jest woln ope-racj,szczeglniejeelipracujemynadszybkanimacj.Nacaeszczciedzisiejszeakceleratory graficzne optymalizowane s do dziaania w tych wanie trybach kolorwi dostarczane s z wystarczajc iloci wbudowanej pamici, eby sprosta rosncemuzapotrzebowaniu na pami.Iryby ko|oru 1- | 32-b|towegoZe wzgldu na oszczdno pamici i popraw wydajnoci w wielu kartach graficznychstosowane s rwnie rne inne tryby kolorw. W celu poprawy wydajnoci czsto uy-wanyjesttryb32-bitowy,ktryczasaminazywanyjesttrybemtruecolor(prawdziwykolor). Tak naprawd w tym trybie nie jest wywietlanych wicej kolorw ni w trybie24-bitowym, a poprawawydajnoci uzyskiwana jest poprzez ustawianie danych kadegopiksela do granicy adresw 32-bitowych. Niestety, w zwizku z tym marnowanych jestosiem bitw (jeden bajt) dla kadego piksela. W dzisiejszych 32-bitowych komputerach PCbudowanych zwykorzystaniemprocesorwfirmyIntelstosowanieadreswpamicipo-dzielnych przez 32 pozwala na uzyskanie znacznie lepszych wynikw dostpu do pamici.Nowoczesne akceleratory graficzne rwnie stosuj tryb 32-bitowy, w ktrym pierwsze24 bity wykorzystane s na zapisanie kolorw RGB, a kocowe 8 bitw stosowane jestdo przechowywania wartoci kanau alfa. Na temat kanau alfa bdziemy mwi wicejw nastpnym rozdziale.Innym popularnym trybem jest tryb 16-bitowy, ktry czasamiobsugiwanyjestwcelupoprawienia efektywnoci wykorzystania pamici. Pozwala on nada kademu pikselowijeden z 65 536 kolorw. Ten tryb jest niemal tak samo skuteczny jeeli chodzi o odwzo-rowywanie obrazwfotograficznych jaktryb 24-bitowy. Praktycznietrudnoodrniodsiebie obraz wywietlany w obu tych trybach. To wanie poprawa wykorzystania pamicii wzrost prdkoci wywietlania obrazw spowodoway, e tryb ten by bardzo popularnyw pierwszych akceleratorach grafiki trjwymiarowej przeznaczonych do gier. Jednak do-datkowe kolory w trybie 24-bitowym bardzo podnosz jako obrazu, jeeli do jego gene-rowania wykorzystywane s operacje cieniowania i mieszania kolorw.Rozdzia 5.Kolor, materiay i owietlenie. Podstawy 2317[YCPKGMQNQTYY1RGP).Wiemy ju, e biblioteka OpenGL definiuje kolory, okrelajc intensywnoci skadowych:czerwonej, zielonej i niebieskiej. Wiemy te, e nowoczesny sprzt jest w stanie wywie-tli niemalwszystkiemoliwekombinacjetychskadowychalbozaledwiekilka.Jakw takim razie moemy okreli potrzebny nam kolor, podajc wspomniane trzy skadowe?5\GEKCPMQNQTYKadykolormoemyzdefiniowatrzemadodatnimiwartociami,dlategowszystkiedostpne kolory mona przedstawi jako pewn przestrze nazywan przestrzeni kolorwRGB. Na rysunku 5.6 przedstawiono, jakwyglda taka przestrze kolorw wpocztkuukadu wsprzdnych z osiami kolorw czerwonego, zielonego i niebieskiego. Wsp-rzdne poszczeglnych kolorw okrelane s na tej samej zasadzie jak wsprzdne x, yi z. W pocztku ukadu wsprzdnych intensywno kadej skadowej jest rwna zero,co oznacza kolor czarny. W komputerach PC wszystkie informacje o kolorze musza zmie-ci si w 24 bitach, co daje 8 bitw na kad skadow. Mona wic powiedzie, e w ka-dej skadowej warto 255 oznacza pene nasycenie tej skadowej koloru. Oznacza to, enasz szecian bdzie mia boki o dugoci 255 jednostek. Dokadnie na przeciwko rogu,w ktrym panuje czer (0,0,0), znajduje si rg biay o wsprzdnych (255, 255, 255).Wzdukadejzosi,przywartoci255znajdujsipenenasyceniakadegokoloruskadowego: czerwonego, zielonego i niebieskiego.kysunek 5..Pocztek ukaduwsprzdnychkoloru RGBPrzedstawiony na rysunku 5.7 szecian kolorw, na swojej powierzchni jak iw swoimwntrzuzawierawszystkiemoliwekolory.Naprzykadwszystkiemoliweodcienieszaroci le wewntrz szecianu, na linii ukonej czcej punkty (0, 0, 0) i (255, 255, 255).Rysunek 5.8 przedstawia gadko cieniowany szecian kolorw rysowany w przykadowymprogramieCCUBE.Napowierzchniszecianuzobaczymonaprzejciakolorwodczerni w jednym rogu, do bieli w przeciwlegym. W trzech rogach, odlegych od czarnegoo255jednostek,monazobaczykoloryczerwony,zielonyiniebieskiwichpenychintensywnociach. Dodatkowo w trzech rogach zobaczy mona kolory ty, zielono-nie-bieski (cyan) i fuksyna (magenta), bdce kombinacjami kolorw podstawowych. Szeciankolorw mona obraca, aby zobaczy wszystkie jego strony.232 Cz IKlasyka OpenGLkysunek 5.7.Przestrzekolorw RGBkysunek 5.8.Wynik dziaaniaprogramu CCUBE7UVCNCPKGMQNQTWT[UQYCPKCPrzyjrzyjmy si krtko funkcji Cccr. Jest ona prototypowana nastpujco:XQKF _!Co!orx!rec _reen o!ue a!pha|,W nazwie funkcji znak x oznacza liczb parametrw. Mog to by trzy parametry ozna-czajce skadowe czerwon, zielon i niebiesk lub cztery parametry, w ktrych czwartyoznacza skadow alfa koloru. Skadowa alfa okrelajca przezroczystokoloru opisanajest dokadniej w dalszej czci rozdziau. Na razie bdziemy uywali trjparametrowejwersji tej funkcji.Symbol'wnazwiefunkcjiokrelatypparametrwprzyjmowanychprzezfunkcj.Mog to by okrelenia | (|,'e), c (ccu|e), ' ('c.'),(n'), s (s|cr'), u| (unsnec|,'e), u (unsnec n') lub us (unsnec s|cr'). Kolejna wersja funkcji ma na koculiterv.Oznaczaona,etawersjafunkcjipobieratabliczawierajcwszystkiepara-metry (litera v oznacza vector, czyli wektor). W podrozdziale Opisy funkcji znajduje siduo dokadniejszy opis funkcji Cccr.Wikszoprogramw,zjakimiprzyjdzienamsispotyka,wykorzystujefunkcjCccro', w ktrej intensywno kadej skadowej okrelana jest liczb z zakresu od 00 do`0. Jednak dla osb z dowiadczeniem w programowaniu w systemie Windows znacznieRozdzia 5.Kolor, materiay i owietlenie. Podstawy 233atwiejsze moe by uycie funkcji Cccrou|. Ta wersja pobiera trzy bajty bez znaku,czyli wartoci od 0 do bb. Stosowanie tej funkcji jest bardzo podobne do stosowaniamakra systemu Windows:_!Co!or:uo0 55 18| RB0 55 18|Rzeczywicie, ta metoda moe uatwi dopasowanie kolorw w bibliotece OpenGL do kolo-rw wykorzystywanych w programie w czasie rysowania niezwizanego z OpenGL. Mimoto trzeba zaznaczy, e wewntrznie biblioteka OpenGL przechowuje dane kolorw jakowartoci zmiennoprzecinkowe, wic stosowanie wartoci innego typu moe spowodowaspadek wydajnoci z powodu koniecznych przeksztace wykonywanychw czasie dziaa-niaprogramu.Pozatymwprzyszocimoesiokaza,epowstanznaczniepojem-niejsze bufory kolorw (tak naprawd to ju zaczynaj si pojawia bufory zapamitujcewartoci zmiennoprzecinkowe), w ktrych przechowywane wartoci zmiennoprzecinkowenajdokadniej odwzoruj stosowane kolory.%KGPKQYCPKGPoprzedniopodawanadefinicjafunkcjiCccrmwia,eustalaonaaktywnykolorrysujcy,ktrympokrywaneswszystkieobiektyrysowanepowywoaniutejfunkcji.PoomwieniuwpoprzednimrozdzialewszystkichobiektwpodstawowychbibliotekiOpenGL moemy teraznieco uszczegowi t definicj funkcja Cccr ustala ak-tualnykolorrysujcydlawszystkichwierzchokwdefiniowanychpowywoaniutejfunkcji. W dotychczasowych przykadach rysowalimy obiekty tylko w postaci szkieletw,awewentualniewypenionychobiektachkadapowierzchniamiaainnykolor.Jeelijednak dla kadego wierzchoka obiektu podstawowego (punktu, linii lub wielokta) zdefi-niujemy inny kolor, to jakiego koloru bdzie jego wntrze?Odpowiednatopytaniezaczniemyodpunktw.Kadypunktdefiniowanyjesttylkojednym wierzchokiem, dlatego jakikolwiek kolor zostanie przydzielony wierzchokowi,bdzie to aktywny kolor punktu. Proste.Ju jednak linia definiowana jest dwoma wierzchokami, z ktrych kady moe mie innykolor.Kolorsamejliniitworzonyjestprzezmodelcieniowania.Cieniowaniedefinio-wane jest po prostu jako pynne przejcie od jednego koloru do drugiego. W przestrzenikolorw RGB (musimy wrci do rysunku 5.7) dowolne dwa punkty mog by poczonelini prost.Pynne cieniowanie sprawia, e wzdu linii kolory zmieniaj si w taki sam sposb jakkoloryliniiczcejdwapunktywewntrzszecianukolorw.Narysunku5.9przed-stawiony zosta szecian kolorw z zaznaczonymi punktamikolorw biaego i czarnego.Poniej znajduje si linia definiowana dwoma wierzchokami jednym biaym, a drugimczarnym. Kolory wybierane w czasie rysowania tej linii pokrywaj si dokadnie z kolo-ramilecyminaprostejczcejwszecianiekolorwpunktybiayiczarny.Wtensposb powstaje linia, ktra na pocztku jest czarna, a w dalszej czci jej kolor zmienia siw coraz janiejszy szary, a na kocu osiga biel.234 Cz IKlasyka OpenGLkysunek 5..Rysowanie liniiz koloramizmieniajcymi siod czerni do bieliMoemy sami wykona cieniowanie linii, znajdujc matematyczne rwnanie linii czcejdwapunktywewntrztrjwymiarowejprzestrzenikolorwRGB.Pniejwystarczyprzej w ptli od jednego koca linii do drugiego, sprawdzajc po drodze odpowiedniewsprzdne w przestrzeni kolorw wyznaczajce kolor kadego piksela linii. W wieludobrychksikachopisujcychgrafikkomputerowpodawanejestwyjanieniealgo-rytmupozwalajcegonauzyskaniedoskonaychefektwcieniowania,przeniesieniakolorw linii z szecianu kolorw na ekran komputera i tym podobne. Na szczcie cat prac wykona za nas biblioteka OpenGL.Wprzypadkuwieloktwzadaniecieniowaniastajesiznacznietrudniejsze.Naprzy-kadtrjktmoebyrwnieprzedstawionyjakopaszczyznawewntrzszecianukolorw. Na rysunku 5.10 przedstawiono trjkt, ktrego wierzchokom nadano koloryopenymnasyceniuskadowychczerwonej,zielonejiniebieskiej.Kodwywietlajcytaki trjkt podany zosta na listingu 5.1. Pochodzi on z programu TRIANGLE znajdujcegosi na pycie CD doczonej do tej ksiki.I|st|ng 5.1. Rysowanie trjkta cieniowanego kolorami czerwonym, zielonym i niebieskim// Wczenie gadkiego cieniowania_!ShaceMoce!|SMJJT'|,// Rysowanie trjkta_!Be_:n|TRT/N|FS|,// Wierzchoek czerwony_!Co!or:uo|uo,!e|55|uo,!e|0|uo,!e|0|,_!Ver!ex:f00f000f00f|,Rozdzia 5.Kolor, materiay i owietlenie. Podstawy 235kysunek 5.10.Trjkt w przestrzenikolorw RGB// Wierzchoek zielony - na dole po prawej stronie_!Co!or:uo|uo,!e|0|uo,!e|55|uo,!e|0|,_!Ver!ex:f000f-700f00f|,// Wierzchoek niebieski - na dole po lewej stronie_!Co!or:uo|uo,!e|0|uo,!e|0|uo,!e|55|,_!Ver!ex:f-000f -700f 00f|,_!Fnc|,7UVCNCPKGOQFGNWEKGPKQYCPKCW pierwszej linii listingu 5.1 ustalamy, e modelem cieniowania stosowanym przez biblio-tek OpenGL bdzie cieniowanie gadkie, czyli model omawiany wczeniej. Co prawdajest to ustawienie domylne, ale i tak lepiej wywoywa t funkcj upewniamy si w tensposb, e wszystko bdzie dziaao zgodnie z zaoeniami.Drugim modelem cieniowania, jaki mona wczy funkcj S|.ceMcce, jest O|_||AT,czyli cieniowanie paskie. Cieniowanie paskie oznacza, e wewntrz obiektw podstawo-wych nie s wykonywane adne obliczenia zwizane z cieniowaniem. Mwic oglnie,przy wczonym cieniowaniu paskim kolor caego obiektu podstawowego definiowany jestkolorem ostatniego wierzchoka definiujcego ten obiekt. Jedynym wyjtkiem s obiektypodstawowe O|_PO|YOON. Tutaj kolor obiektu definiuje kolor pierwszego wierzchoka.Nastpnie, kod z listingu 5.1 nadaje grnemuwierzchokowi kolor czerwony, dolnemuprawemu wierzchokowi kolor zielony, a dolnemu lewemu kolor niebieski. Wczonejest cieniowaniegadkie, dlategowntrze trjktawypenionejestpynnymprzejciempomidzy kolorami wierzchokw.Wynik dziaania programu TRIANGLE pokazany zosta na rysunku 5.11. Wida na nimpaszczyzn przedstawion graficznie na rysunku 5.10.Wielokty znacznie bardziej zoone od trjktw rwnie mog mie definiowane rnekolorywposzczeglnychwierzchokach.Jednakwichprzypadkulogikacieniowaniamoe by ju bardzo skomplikowana. Na cae szczcie dziki bibliotece OpenGL nigdynie bdziemy musieli si o to martwi. Niezalenie od tego, jak zoony wielokt zdefiniu-jemy, OpenGL doskonale wycieniuje jego wntrze, stosujc kolory nadane wierzchokom.236 Cz IKlasyka OpenGLkysunek 5.11.Wynik dziaaniaprogramu TRIANGLE-QNQT[YYKGEKGT\GE\[YKUV[OW rzeczywistoci kolory obiektw nie s niezmienne, nie s te cieniowaniem pomidzykilkoma wartociami RGB. Rysunek 5.12 przedstawia wynik dziaania programu JET znaj-dujcego si na pycie CD. Jest to prosty samolot odrzutowy, poskadany rcznie z trjktwza pomoc tych metod, ktre opisywalimy do tej pory. Tak jak i w innych programachz tego rozdziau, moliwe jest obracanie samolotu poprzez naciskanie klawiszy strzaek.kysunek 5.12.Prosty samolotodrzutowy, zbudowanyz rnokolorowychtrjktwKolorysamolotuzostaytakdobrane,ebypodkrelajegotrjwymiarowstruktur.Nawet pomijajc dziwaczn struktur trjktw tworzcych samolot, mona zauway,e nie wyglda on tak jak obiekty rzeczywiste.Zamy, e zbudowalimymodel tegosamolotu i kad z powierzchni pomalowalimy odpowiednim kolorem. W zalenoci oduytej farby model sprawiaby wraenie byszczcego lub matowego, a kolor kadej pa-skiej powierzchni zmieniaby si wraz ze zmianami kta patrzenia i padania wiata.Biblioteka OpenGL cakiem dobrze radzi sobie z jak najlepszym odwzorowywaniem rze-czywistego wygldu obiektw pod wzgldem warunkw owietlenia. Kady obiekt, o ile niegeneruje wasnego wiata, owietlany jest trzema rodzajami wiata: otaczajcym (ambient),rozproszonym (diffuse) i odbitym (specular).Rozdzia 5.Kolor, materiay i owietlenie. Podstawy 237YKCVQQVCE\CLEGwiato otaczajce nie pochodzi z adnego konkretnego kierunku. Posiada ono co prawdardo, ale promienie wiata odbijay si ju po caej scenie tyle razy, e wiato to ca-kowicie stracio jakikolwiek kierunek. Wszystkie powierzchnie obiektw znajdujcych siw wietle otaczajcym s owietlone rwnomiernie, niezalenie odkierunku.Wewszyst-kich poprzednich przykadach mona zauway, e prezentowane obiekty owietlone swanie takim wiatem s pokryte jednakowym kolorem niezalenie od ich pooeniai naszego kta patrzenia. Rysunek 5.13 przedstawia obiekt owietlony wiatem otaczajcym.kysunek 5.13.Obiekt owietlonywycznie wiatemotaczajcymYKCVQTQ\RTQU\QPGwiato rozproszone pada na obiekt z okrelonego kierunku, ale jest na nim rozpraszanewe wszystkich kierunkach. Mimo to powierzchnie obiektu owietlone bezporednio bdjaniejsze od powierzchni ustawionych w stosunku do kierunku padania wiata pod pew-nym ktem. Dobrym przykadem takiego wiata bdzie wiato jarzeniowe albo wiatosoneczne wpadajce w poudnie przez okna. Obiekt pokazany na rysunku 5.14 owietlanyjest wiatem rozproszonym.kysunek 5.14.Obiekt owietlonywycznie wiatemrozproszonymYKCVQQFDKVGJeeli wiato pada na obiekt z pewnego kierunku (podobnie jak wiato rozproszone), aleodbijane jest w jednym konkretnym kierunku, to mamy do czynienia ze wiatem odbitym.Mocno odbite wiato najczciej powoduje wystpienie na powierzchni owietlanej jasnejplamy nazywanej odbyskiem (ang. specular highlight). Przykadami wiata odbitegomog by latarka lub soce. Na rysunku 5.15 mona zobaczy obiekt owietlony wycz-nie wiatem odbitym.238 Cz IKlasyka OpenGLkysunek 5.15.Obiekt owietlonywiatem odbitym#VGTC\YU\[UVMQTC\GONie istnieje rdo wiata, ktre skadaoby si wycznie z jednego z opisanych wyejrodzajw wiata. Niemal kade wiato skada si natomiast z rnych kombinacji tychrodzajw. Na przykad promie czerwonego lasera laboratoryjnego skada si niemalw caoci z czerwonego wiata odbitego. Jednak czsteczki kurzu lub dymu mog rozpra-sza ten promie tak, e bdzie onwidocznynacaejswojej dugoci. Wtensposbuwidacznia si skadowa wiata rozproszenia. Dodatkowo, jeeli promie bdzie jasny,a w pokoju nie bd dziaay adne inne rda wiata, to na wszystkich obiektach bdziemonazobaczydelikatnczerwonpowiat.Jestonaspowodowanabardzomaska-dow wiata otaczajcego obecn w promieniu lasera.Jak wida, kade rdo wiata obecne na scenie musi skada si z trzech skadowychowietlenia: otaczajcego, rozproszenia i odbitego. Podobnie jak zwyke kolory kada ska-dowaowietleniarwniedefiniowanajestskadowymiRGBAopisujcymiwzgldneintensywnoci wiata czerwonego, zielonego i niebieskiego w kadym rodzaju wiata(wopisiekoloruwiataskadowaalfajestignorowana).Naprzykad,wiatowspo-mnianegoczerwonegolaseramoebyopisywanewartociamiskadowychpodanymiw tabeli 5.1.Iobe|o 5.1. Rozkad skadowych wiata w promieniu czerwonego laseraCzerwony I|e|ony N|eb|esk| A|foOdbite 099 00 00 10Rozproszone 010 00 00 10Otoczenia 005 00 00 10Prosz zauway, e promie czerwonego lasera nie posiada skadowej wiata zielonegoani niebieskiego. Wanejestrwnieto,ekadaskadowawiata(odbitego,rozpro-szonego i otoczenia) moe przyjmowa wartoci od 00 do `0. Mona to interpretowaw ten sposb, e wiato lasera czerwonego bdzie miao w pewnych scenach bardzo wy-sok warto skadowej wiata odbitego, niewielkwarto skadowej wiata rozproszo-nego i bardzo ma warto skadowej wiata otoczenia. Tam, gdzie bdzie pada pro-mie lasera, z pewnoci zobaczymy czerwon plamk. Poza tym w wyniku panujcychw pokoju warunkw (dym, kurz itp.), skadowa rozproszenia z pewnoci pozwoli namdojrze w powietrzu promie lasera. W kocu skadowa owietlenia otoczenia (rwnieRozdzia 5.Kolor, materiay i owietlenie. Podstawy 239z powodu wystpujcych w powietrzu czsteczek dymu lub kurzu) niewielk cz wiataskieruje na elementy wyposaenia pokoju. Bardzo czsto czy si skadowe owietleniarozproszonego i otoczenia ze wzgldu na ich podobn natur./CVGTKC[YYKGEKGT\GE\[YKUV[Owiato jest tylko jedn czci rwnania. W wiecie rzeczywistym obiekty maj swojewasnekolory. Wczeniej opisywalimykolor obiektu jako kolor odbitegoprzezniegowiata.Niebieskapikaodbijawikszoniebieskichfotonw,apochaniawikszopozostaych. Zakadalimy wtedy, e wiato padajce na pik zawiera w sobie niebieskiefotony, ktre mogyby by odbite i odebrane przez obserwatora. Najczciej, sceny owie-tlane s wiatem biaym,ktrejestrwnomiernmieszankwszystkichkolorw.Dla-tego w wietle biaym obiekty ujawniaj swoje naturalne kolory. Niestety, nie zawszemamytakdoskonaewarunki.Jeelinaszaniebieskpikumiecimywciemnympo-koju i owietlimy j wiatem tym, to dla obserwatora pika bdzie czarna, poniewacaetewiatozostaniepochoniteprzezpik,azbrakuniebieskichfotonwnicnie bdzie si od niej odbijao.9CEKYQEKOCVGTKCYKorzystajc z owietlenia, nie definiujemy wieloktw, nadajc im jaki kolor, ale raczejprzypisujcimmateriaposiadajcypewnewaciwociodblaskowe.Niemwimy,ewielokt jest czerwony, ale e jest zbudowany z materiau odbijajcego gwnie czerwonewiato. Nadal moemy powiedzie, e obiekt ma czerwon powierzchni, ale teraz mu-simy okreli jegowaciwociodblaskowedlawiataotoczenia,rozproszeniaiodbi-tego. Materia moe by byszczcy i doskonale odbija wiato odbite, ale jednoczeniepochania wiksz cz wiata rozproszenia lub otoczenia. Z drugiej strony materiaymatowe mog pochania wszelkie wiato odbite i w adnych okolicznociach nie miebyszczcego wygldu. Inn waciwoci, jak musimy okreli, jest informacja o waci-wociachemisjiobiektwgenerujcychwasnewiato,takichjaktylnewiatasamo-chodw albo zegarki wiecce w ciemnociach.&QFCYCPKGYKCVCFQOCVGTKCYTakieustawienieparametrwowietleniaimateriau,ebyuzyskapodaneefekty,wymaga pewnej praktyki. Niema adnych doskonaych porad, anioglnychzasad,dojakichnaleaobysistosowa.Wtymmiejscuanalizamusiustpimiejscasztuce,a nauka magii. Biblioteka OpenGLw czasierysowaniakadegoobiektudecydujeo kolorze, w jakim bdzie rysowany kady piksel tego obiektu. Sam obiekt ma kolorodblasku, a i rdo wiata dysponuje wasnymi kolorami. W jaki sposb biblioteka okre-la kolor nadawany pikselom? Stosowane tu zasady nie s trudne, cho wymaga to uyciachoby najprostszego mnoenia (a nauczyciele mwili, e kiedy si przyda!).240 Cz IKlasyka OpenGLKademuwierzchokowiobiektupodstawowegoprzepisywanajestwartokoloruRGBwynikajcaziloczynupoczonychefektwowietleniaobiektuwiatemotoczenia,rozproszenia i odbitymprzezwaciwociodblaskowemateriaudlawiataotoczenia,rozproszenia i odbitego. Efekt penego owietlenia obiektu uzyskiwany jest pniej po-przez zastosowanie pynnego cieniowania wntrza wieloktw.9[NKE\CPKGGHGMVYQYKGVNGPKCQVQE\GPKCWyliczajc efekty owietlenia otoczenia, musimy odoy na bok pojcie koloru i zaczmyle wycznie o intensywnociach skadowych czerwonej, zielonej i niebieskiej. Dlarda wiata otoczenia o poowicznej intensywnociwszystkichskadowychkoloruwartoci RGB tego rda wynosz (0.5, 0.5, 0.5). Jeeli to rdo owietla obiekt, ktregowaciwociodblaskowedlawiataotoczeniawynosz(0.5,1.0,0.5),towynikowykolor skadowych tego wiata wynosi:05 ' 05 05 ' 10 05 ' 05| 05 05 05|Jest to wynik mnoenia kadej skadowej rda wiata otoczenia przez odpowiadajceim waciwoci odblaskowe materiau (rysunek 5.16).kysunek 5.1.Wyliczanie koloruowietlenia otoczeniadla obiektuWynikaztego,eskadowekoloruokrelajtylkoprocentilociwiata,jakiebdzieodbijane od obiektu. W naszym przykadzie skadowa czerwona wiata miaa warto 0b,awaciwocimateriauobiektupowodoway,ebyaonaodbijanatylkowpoowieswojejpoowicznejintensywnoci.Prostamatematykamwinam,eprazyptowier, czyli 0b.'HGMV[YKCVCTQ\RTQU\GPKCKQFDKVGIQWyliczenia dla wiata otoczenia s jednak wyjtkowo proste. wiato rozproszone rwnieopisywane jest wartociami intensywnoci RGB, ktre w taki sam sposb cz si z wa-ciwociamimateriauobiektu.Jednakwtymprzypadkuwiatomapewienkierunek,dlategojegointensywnonapowierzchniobiektubdziernawzalenociodktapadaniawiata,odlegociobiektuodrda,dowolnegoczynnikatumicego(naprzy-kadmgyznajdujcejsimidzyobiektemardemwiata)itp.Dokadnietesamezalenoci dotycz rwnie rde i intensywnoci wiata odbitego. Efekt netto wartociRGB wyliczany jest w ten sam sposb co dla wiata otoczenia, czyli intensywno rdawiata (zmodyfikowana przez kt padania) mnoona jest przez wspczynnik odblaskuRozdzia 5.Kolor, materiay i owietlenie. Podstawy 241materiau. Na kocu wszystkie trzy skadowe koloru czone s ze sob, tworzc kocowykolor obiektu. Jeeli ktrakolwiek ze skadowych bdzie miaa w wyniku tych wyliczewartowikszod`0,tozostanieograniczonadotejwartoci.Niemonaprzeciemie intensywnoci wikszej od maksymalnej.Oglnie, skadowe wiata otoczenia i rozproszonego maj prawie takie samo dziaaniew rdach wiata i materiaach, dlatego najbardziej wpywaj na efektywny kolor obiek-tw.wiatoodbitei odpowiadajcemuwaciwocimateriaunajczciejskoloruszarego lub biaego. Skadowa wiata odbitego najbardziej zaley odkta padania,wicmiejsca padania wiata odbitego najczciej s biae.&QFCYCPKGYKCVGFQUEGP[Moe si wydawa, e powysze wywody s ogromn iloci nagle podanej teorii. Zwol-nimy wic i spokojnie przeanalizujemy przykady kodu koniecznego, jeeli chcemy stoso-wa owietlenie sceny. W ten sposb utrwalimy sobie wszystkie podane wyej informacje,anadodatekzademonstrujemykilkanowychfunkcjiiwymagamechanizmuwiatew bibliotece OpenGL. Nastpnych kilka przykadw opiera si bdzie na programie JET.Pierwotnawersja nie stosuje adnych mechanizmw zwizanych z owietleniem i rysujepoprostutrjktyzwczonymmechanizmemusuwanianiewidocznychpowierzchni(testowanie gbi). Gdy zakoczymy wprowadza do niego poprawki i zaczniemy obracasamolot, metaliczne powierzchnie naszego odrzutowca bd wspaniale lni w socu.9E\GPKGQYKGVNGPKCAby nakaza bibliotece OpenGL przeprowadzanie oblicze zwizanych z owietleniem,wystarczy wywoa funkcj ln.|e z parametrem O|_|1OHT1NO:_!Fnao!e||T'TTN|,Ju to proste wywoanie spowoduje, e biblioteka OpenGL w czasie okrelania kolorwwszystkichwierzchokwscenybdziestosowaawaciwocimateriawiparametryowietlenia. Niestety, bez sprecyzowania tych waciwoci i parametrw nasz obiekt pozo-staby ciemny i nieowietlony tak jak nasz przykadowy samolot z rysunku 5.17. Jeeli spoj-rzymy na kod dowolnego z przykadowych programw wywodzcych si z programu JET,to zobaczymy, e funkcj Se'u,RC wywoujemy zaraz po utworzeniu kontekstu renderowa-nia. W tym wanie miejscu wykonywane s wszystkie inicjalizacje parametrw owietlenia.-QPHKIWTQYCPKGOQFGNWQYKGVNGPKCPierwsz rzecz, jak musimy wykona zaraz po wczeniu obliczania owietlenia, to skon-figurowaniemodeluowietlenia.Trzyparametrywpywajcenamodelowietleniausta-wiane s za pomoc funkcji ||'Mcce.242 Cz IKlasyka OpenGLkysunek 5.17.Nieowietlony samolotnie odbija adnegowiataPierwszym parametrem owietlenia uywanym w naszym nastpnym przykadzie (pro-gramAMBIENT)jestO|_|1OHT_MODl|_AMB1lNT.Pozwalaonokreliglobalnewiatootoczenia owietlajce wszystkie obiekty w ten sam sposb ze wszystkich stron. Podanyponiej kod definiuje jasne, biae wiato:// Jasne biae wiato - pena intensywno wszystkich wartoci RGB|f!oa! amo:en!|:_h! 10f 10f 10f 10f ,// Wczenie owietlenia_!Fnao!e||T'TTN|,// Konfigurujemy model owietlenia tak, eby stosowa// wiato otoczenia zdefiniowane tablic ambientLight[]_!|:_h!Moce!fv||T'TMJOF|/MBTFNTamo:en!|:_h!|,Podana tutaj wersja funkcji ||'Mcce ||'Mcce'v w pierwszym parametrzepobiera informacj o typie owietlenia, jakie poddajemy modyfikacjom, a w drugim para-metrze pobiera tablic wartoci RGBA opisujc wiato. Domylne wartoci RGBA dlaglobalnego wiata otoczenia wynosz 0, 0, 0, `0), co oznacza bardzo przy-ciemnionewiato.Pozostaeparametrymodeluowietleniapozawalajokreli,czyowietlane maj by przednie, tylnie czy moe obie strony wieloktw oraz metody obli-czania owietlenia wiatem odbitym. Wicej informacji o tych parametrach znajduje siw podrozdziale Opisy funkcji.7UVCNCPKGYCEKYQEKOCVGTKCYMamy ju rdo wiata otoczenia. Musimy teraz ustali waciwoci materiaw, tak ebynasze wielokty mogy odbija to wiato, a my zobaczy samolot. Istniej dwie metodyustalania waciwoci materiaw. Pierwsza z nich polega na uyciu funkcji M.'er.przed zdefiniowaniem kadego wielokta lub zbioru wieloktw. Przyjrzymy si poni-szemu fragmentowi kodu:|f!oa! _ra, 075f 075f 075f 10f,

_!Ma!er:a!fv|FRJNT |/MBTFNT/NOOTFFUSF _ra,|,_!Be_:n|TRT/N|FS|,Rozdzia 5.Kolor, materiay i owietlenie. Podstawy 243_!Ver!ex:f-150f 00f :00f|,_!Ver!ex:f00f 150f :00f|,_!Ver!ex:f00f 00f -5b0f|,_!Fnc|,Pierwszy parametr funkcji M.'er.'v okrela, czy definiowane bd waciwoci mate-riau przedniej, tylnej czy moe obu stron wieloktw (O|_|RONT, O|_BAC|, O|_|RONT_AND_BAC|).W drugim parametrze podawana jest waciwo, ktra bdzie zmieniana;w tym przy-padkuwaciwociodblaskowedlawiataotoczeniairozproszeniabdtakiesame.Ostatnim parametrem jest tablica zawierajc wartoci RGBA opisujce odblaskowewa-ciwoci materiau. Wszystkie obiekty podstawowe rysowane po wywoaniu tej funkcjibdmiayustaloneprzezniwaciwociodblaskoweadomomentuponownegowywoania funkcji M.'er..W wikszoci przypadkw skadowe wiata otoczenia i rozproszenia s takie same, a jeelinie chcemy stosowa specjalnych efektw owietlenia (iskrzenia, rozbyskw), nie mu-simy definiowa adnych waciwoci dla wiata odbitego. Mimo to przygotowywanietablicykolorwiwywoywaniefunkcjiM.'er.przedrysowaniemkadegowielo-kta lub grupy wieloktw moe by zajciem bardzo nucym.Jestemywiecgotowinazastosowaniedrugiej,lepszejmetodyustalaniawaciwocimateriaw nazywanej ledzeniem kolorw (ang. color tracking). Dziki tej metodziemoemyustaliwaciwocimateriaujuwmomenciewywoaniafunkcjiCccr.Aby wczy ten mechanizm, trzeba najpierw wywoa funkcj ln.|e z parametremO|_CO|OR_MATlR1A|:_!Fnao!e|CJ|JRM/TFRT/||,Nastpnie funkcj CccrM.'er. okrelamy parametry podawane zaraz za wartociamifunkcji Cccr. Na przykad, aby ustawiwaciwocimateriaudlawiataotoczeniai rozproszeniadlaprzednichstronwieloktwtak,abyledziyonekoloryustawianefunkcj Cccr, naley wywoa:_!Co!orMa!er:a!|FRJNT |/MBTFNT/NOOTFFUSF|,Terazpodanywyejfragmentkoduustawiajcywaciwocimateriawmoglibymyzmodyfikowa nastpujco. Moe to wyglda na tworzenie wikszej iloci kodu, ale taknaprawd oszczdza si w ten sposb wiele linii kodu, co przekada si na szybsze ryso-wanie wielu rnokolorowych wieloktw:// Wczenie ledzenia kolorw_!Fnao!e|CJ|JRM/TFRT/||,// Kolory waciwoci materiaw dla wiata otoczenia i rozproszenia// bd ledziy wartoci podawane w funkcji glColor_!Co!orMa!er:a!|FRJNT |/MBTFNT/NOOTFFUSF|,

_!Co!or:f075f 075f 075f|,_!Be_:n|TRT/N|FS|,_!Ver!ex:f-150f 00f :00f|,_!Ver!ex:f00f 150f :00f|,_!Ver!ex:f00f 00f -5b0f|,_!Fnc|,244 Cz IKlasyka OpenGLNa listingu 5.2 podajemykod,jakidodanyzostadofunkcjiSe'u,RCz przykadowegoprogramu JET, w ktrymustalamy jasne rdo wiata otoczenia, a takewaciwocimateriaw pozwalajce obiektom odbija wiato i w efekcie pojawi si na ekranie. Po-zmienialimy te kolory samolotu. Teraz rne kolory nadalimy poszczeglnym sekcjomsamolotu,anietworzcymgowieloktom.Kocowywynik(pokazanynarysunku5.18)nie rnisi jednakznaczcoodtego,couzyskalimyjeszczeprzedwczeniemowie-tlenia. Jeeli jednak zredukujemy wiato otoczenia o poow, to uzyskamy obraz przed-stawionynarysunku5.19.Abyopoowobniyintensywnoowietlenia,wartociRGBA dla wiata otoczenia ustalamy nastpujco:|f!oa! amo:en!|:_h! 05f 05f 05f 10f ,I|st|ng 5.2. Konfiguracja warunkw owietlenia otoczenia// Ta funkcja wykonuje wszystkie konieczne inicjalizacje kontekstu renderowania// Tutaj ustala i inicjalizuje owietlenie scenyXQKF Se!upRC|// Wartoci wiata// Jasne biae wiato|f!oa! amo:en!|:_h! 10f 10f 10f 10f ,_!Fnao!e|OFPT'TFST|, // Usuwanie powierzchni ukrytych_!Fnao!e|CU||F/CF|,// Nie bdziemy prowadzi oblicze wntrza samolotu_!Fron!Face|CC.|, // Wielokty z nawiniciem przeciwnym do ruchu wskazwek zegara// Owietlenie_!Fnao!e||T'TTN|, // Wczenie owietlenia// Ustalamy, e model owietlenia bdzie stosowa wiato otoczenia// zdefiniowane w tablicy ambientLight []_!|:_h!Moce!fv||T'TMJOF|/MBTFNTamo:en!|:_h!|,_!Fnao!e|CJ|JRM/TFRT/||, // Wczenie ledzenia kolorw materiaw// Waciwoci owietlenia otoczenia i rozproszenia// bd ledzi wartoci podawane funkcji glColor_!Co!orMa!er:a!|FRJNT|/MBTFNT/NOOTFFUSF|,// liczny jasny bkit_!C!earCo!or00f 00f 05f10f|,Teraz wiemy ju, jak mona obniy jasno owietlenia otoczenia tak, aby uzyska ciem-niejszy obraz. Ta waciwo bardzo przydaje si w symulacjach, w ktrych zmierzch za-pada stopniowo albo w momentach, gdy zablokowane zostaje gwne rdo wiata dlasceny, czyli gdy jeden obiekt znajduje si w cieniu drugiego.Rozdzia 5.Kolor, materiay i owietlenie. Podstawy 245kysunek 5.18.Wynik dziaaniaprzykadowegoprogramu AMBIENTkysunek 5.1.Wynik dziaaniaprzykadowegoprogramu AMBIENTpo przyciemnieniuowietlenia7[YCPKGTFGYKCVCManipulacje wiatem otoczenia z pewnoci s uyteczne, ale w wikszoci aplikacji sta-wiajcych sobie za zadanie modelowanie wiata rzeczywistego konieczne jest zdefiniowaniewicejnitylkojednegordawiata.Takierdawiata,pozarnymiintensyw-nociamiikolorami,majrwnieswojepozycjeikierunkiwprzestrzeni.Rozmiesz-czenie takich wiate moe mie znaczcy wpyw na wygld naszej sceny.Biblioteka OpenGL pozwala na obsug przynajmniej omiuniezalenych rdewiataumieszczonych w dowolnych punktach na scenie albo poza przestrzeni widoczn. Mo-emy umieci rdo wiata w nieskoczonej odlegoci od sceny, tak eby jego pro-mienie padajce na scen byy zawsze rwnolege albo umieci je bardzo blisko, tak ebypromieniowaowewszystkich kierunkach. Moliwe jest te zdefiniowanie wiata punk-towego o dowolnych charakterystykach, ktre wiecio by wewntrz zadanego stoka.246 Cz IKlasyka OpenGL)F\KGLGUVITC!Definiujc rdo wiata, musimy poinformowa bibliotek OpenGL gdzie si ono znaj-dujeiwktrymkierunkuwieci.Bardzoczstordawiatawiecwewszystkichkierunkach, alemoliwe jest te tworzenie wiatekierunkowych. W kadym przypadkuna powierzchni rysowanego obiektu promienie wiata (pochodzce z dowolnego rdainnegoniczystewiatootoczenia)padajpodbardzornymiktami.Oczywiciew przypadku wiate kierunkowych nie musz by owietlane wszystkie wielokty, z jakichskadasi obiekt.Aby okreli stopiezacienienia poszczeglnych powierzchniobiektu,biblioteka OpenGL musi by w stanie wyliczy kt padania promieni wiata.Na rysunku 5.20 wielokt (kwadrat) owietlany jest promieniami wiata generowanegoprzezpewnerdo.Promienietetworzzpowierzchnipewienkt(A),anastpnieodbijane s pod ktem (B) w kierunku widza (inaczej bymy go nie zobaczyli). Do wyli-czaniawynikowegokolorukadegoelementustosowanesodpowiedniektypadaniapromieni wiata w poczeniu z parametrami owietlenia i omawianymi wczeniej waci-wociami materiaw. Tak si akurat skada, e konstrukcja biblioteki OpenGL wyliczate wartoci dla kadegowierzchoka opisujcegowielokt. Dziki temu, a take dzikitworzeniu pynnych przej pomidzy kolorami poszczeglnych wierzchokw, tworzonajest doskonaa iluzja owietlenia. Czary!kysunek 5.20.wiato odbija siod powierzchni podrnymi ktamiZ punktu widzenia programisty z takimi wyliczeniami owietlenia wi si pewne pro-blemy. Kadywielokt tworzony jest jako zbir wierzchokw bdcych zaledwie punk-tami. Na kady z tych wierzchokw pod pewnym ktem pada promie wiata. Ale jakmonawyznaczyktpomidzypunktemalini(promieniemwiata)?Oczywiciez geometrycznego punktu widzenia nie mona wyznaczy kta pomidzy punktem a liniumieszczon w trzech wymiarach, poniewa w takich warunkach istnieje nieskoczonaliczbamoliwoci.Ztegopowodukoniecznejestzwizaniezkadymwierzchokiemdodatkowejinformacjiwskazujcejkierunekwgrwierzchoka,czylipowierzchniwielokta.0QTOCNPGRQYKGT\EJPKLinia prowadzona od wierzchoka w kierunku grnym, pod ktem prostym w stosunku dopewnej wyimaginowanej powierzchni (lub naszego wielokta) nazywana jest wektoremnormalnym. Termin wektor normalny moe kojarzy si z rozmowami, jakie prowadzmidzysobbohaterowieserialuStarTrek,aleoznaczaonpoprostuliniprostopadRozdzia 5.Kolor, materiay i owietlenie. Podstawy 247do rzeczywistejlubwyimaginowanejpowierzchni.Wektorjestliniwskazujcwpew-nym kierunku, a sowo normalny, to inne okrelenie naprostopady, czyliustawionypod ktem 90. Bardzo lubi stosowa je jajogowi jakby prostopady nie byo dopaskudnymsowem!Podsumowujcwektornormalnytoliniawskazujcakierunekustawiony pod ktem 90 w stosunku do powierzchni wielokta. Na rysunku 5.21 przed-stawiono przykady wektorw normalnych w dwch i trzech wymiarach.kysunek 5.21.Wektor normalnyw dwch i trzechwymiarachPowstaje tutaj pytanie, dlaczego musimy definiowa wektor normalny dla kadego wierz-choka w wielokcie. Dlaczego nie moemy zdefiniowa pojedynczegowektora dlawielo-kta i stosowa go we wszystkich jego wierzchokach? Oczywicie, e moemy i w kilkupierwszych przykadach bdziemy tak robi. Czasami jednak nie bdziemy chcieli, ebywektorynormalnebyydokadnieprostopadedopowierzchniwielokta.Zpewnocikady zauway, e nie wszystkie powierzchnie s paskie! Mona tworzy przyblieniatakichpowierzchni,stosujcpaskiewielokty,alepowstajwtensposbkanciastepowierzchnieowielufasetach.Pniejomawiabdziemytechnikipozwalajcenatworzenie iluzji agodnych krzywizn za pomoc wykrconych wektorw normalnych(kolejne czary!). Ale zacznijmy od pocztku&GHKPKQYCPKGPQTOCNPGLAby zobaczy, jak definiuje si normaln dla wierzchoka, spjrzmy na rysunek 5.22, naktrymznajdujesipaszczyznaumieszczonawprzestrzenitrjwymiarowejponadpaszczyzn xz. Staralimy si jak najbardziej uproci ten rysunek, aby zademonstrowapojcienormalnej.Proszzauwaylinibiegncprzezwierzchoek`, `, 0)pro-stopadledopaszczyzny.Jeeliwybierzemynatejliniidowolnyinnypunkt,naprzy-kad`, `0, 0),toliniaod pierwszegopunktudodrugiegobdzienaszymwektoremnormalnym. Drugi z podanych punktw okrela, e kierunek normalnej wskazuje w grosi y. W ten sposb okrelana jest te przednia i tylna strona wielokta, poniewa wektornormalny wskazuje te przedni stron powierzchni.Jakwida, drugi punkt podawany jest jako liczbajednostekwosix,yiz,opisujcychpewien punktnawektorze normalnymwychodzcym zwierzchoka.Zamiastpodawadwa punkty dla kadego wektora normalnego, moemy odj wsprzdne wierzchokaodwsprzdnychtegodrugiegopunktu,aotrzymamytrzywartociwsprzdnychokrelajcych odlego drugiego punktu od wierzchoka w osi x, y i z. W naszym przy-kadzie byoby to:1 10 0| - 1 1 0| 1 - 1 10 - 1 0| 0 9 0|248 Cz IKlasyka OpenGLkysunek 5.22.Wektor normalnyoddalajcy siprostopadleod paszczyznyNa powyszy przykad mona spojrze jeszcze inaczej. Jeeli wierzchoek zostanie przesu-nity do pocztku ukadu wsprzdnych, to punkt wyznaczony przez powysze odejmo-wanie nadal bdzie okrela kierunek wektora normalnegow stosunku do powierzchni.Na rysunku 5.23 przedstawiony zosta wektor przesunity w ten wanie sposb.kysunek 5.23.Przesunity wektornormalnyWektor jestwielkoci kierunkow informujc bibliotek OpenGL o kierunku,w jakimustawione s wierzchoki (lub wielokty). Poniszy fragment kodu pochodzi z naszegoprzykadowego programu JET i przedstawia okrelaniewektoranormalnegodlajednegoz trjktw._!Be_:n|TRT/N|FS|,_!Norma!:f00f -10f 00f|,_!Ver!ex:f00f 00f b00f|,_!Ver!ex:f-150f 00f :00f|,_!Ver!ex:f150f 00f :00f|,_!Fnc|,Rozdzia 5.Kolor, materiay i owietlenie. Podstawy 249Nawinicie wieloktwProszprzyjrzesikolejnocidefiniowaniawierzchokwtrjktapochodzcegozsamolotu.Jeeli bdziemy si mu przyglda od strony wskazywanej przez wektor normalny, to wierzchokibd ukada si w kierunku przeciwnym doruchuwskazwekzegara.Nazywanejestto nawi-niciemwielokta.Domylnieprzodemwieloktaokrelasitstron,poktrejwierzchokiukadaj si wanie w kierunku przeciwnym do ruchu wskazwek zegara.Funkcja Ncr.o' pobiera w parametrach trzy wsprzdne okrelajce wektor nor-malnywskazujcykierunekprostopadydopowierzchnitrjkta.Wtymprzykadzienormalne wszystkich trzech wierzchokw maj dokadnie taki sam kierunek wskazujcyw d ujemnych wartoci osi y. Jest to bardzo prosty przykad, poniewa cay trjkt leywpaszczyniexz;jestonpoprostuwycinkiembrzuchasamolotu.Jakbdziemonazobaczy pniej, czsto bdziemy musieli okrela inne wektory normalne dla kadegowierzchoka wielokta.Perspektywa definiowania wektora normalnego dla kadego wierzchoka wielokta moeby nieco przeraajca, szczeglnie e wiele powierzchni nie ley dokadnie na jednejz gwnych paszczyzn. Bez obaw! Szybko podamy przydatn funkcj, z ktrej moemykorzysta cay czas do wyliczania wektorw normalnych.0QTOCNPGLGFPQUVMQYGW czasie gdy biblioteka OpenGL bdzie odprawia swoje czary, wszystkie wektory nor-malnemuszzostazamienionewnormalnejednostkowe.Normalnajednostkowajestzwykym wektorem normalnym o dugoci `. Normalna przedstawiona na rysunku 5.23 madugo 9 jednostek. Dugo kadej normalnej mona uzyska, podnoszc do kwadratuwarto kadej wsprzdnej, sumujc wyniki, a nastpnie wycigajc z tej sumy pierwia-stek kwadratowy. Jeeli teraz podzielimy kad skadow wektora normalnego przez tdugo, to otrzymamy identycznie skierowany wektor, ale o dugoci rwnej `. W tymprzypadku nasz nowy wektor normalny bdzie okrelany wsprzdnymi 0, `, 0). Procestennazywanyjestnormalizacj.Takwicdlapotrzebobliczeowietlenia,wszystkiewektory normalne musza zosta znormalizowane. wietny argon!Moemy nakaza bibliotece OpenGL wykonywanie normalizacji wszystkichwektorwnormalnych. Trzeba tylko wywoa funkcj ln.|e z parametrem O|_NORMA|1/l:_!Fnao!e|NJRM/|TZF|,Ztmetodwisijednakpewnespadkiwydajnoci.Znacznielepszymwyjciemjest od razu wyliczy znormalizowany wektor normalny, ni zleca bibliotece OpenGLwykonywanie tego zadania.Trzebazaznaczy,ewywoaniefunkcjiSc.erwniebdziewpywanadugonaszego wektora normalnego. Jeeli bdziemy jednoczenie stosowa funkcj Sc.e i me-chanizmy owietlenia, to moemy uzyska rne niepodane efekty. Po zdefiniowaniu dlajakiego obiektuwszystkich normalnych jednostkowych iwuyciufunkcji skalujcej zestaym wspczynnikiem skalowania (skalowanie jest takie samo we wszystkich kierunkach),to moemy zamiast parametru O|_NORMA|1/l zastosowa nowy (wprowadzony w wersji 1.2biblioteki) parametr O|_RlSCA|l_NORMA|S. Parametr ten wczany jest prostym wywoaniem:250 Cz IKlasyka OpenGL_!Fnao!e|RFSC/|FNJRM/|S|,W ten sposb informujemy bibliotek OpenGL, e nasze normalne nie maj jednostkowejdugoci, ale mona je przeskalowa o dokadnie tak sam warto, eby osigny du-go jednostkow. Biblioteka OpenGL sprawdza to, kontrolujc macierzmodel-widok.W efekcie musimy wykona mniej operacji matematycznych ni w innych przypadkach.Ze wzgldu na to, e najlepszym rozwizaniem jest podanie bibliotece OpenGL ju znor-malizowanych wektorw, w bibliotece glTools dostpna jest funkcja pobierajca dowolnywektor i poddajca go normalizacji:XQKF _!!Norma!:zeVec!or|TVec!or vNorma!|,