Shadows in opengl

A színek és a világítás fejezetét hiányos lenne az árnyékok megvitatása nélkül. Az árnyék felvétele a jelenetekre jelentősen növelheti realizmusukat és vizuális hatékonyságukat.

Az 5.38. És az 5.39. Ábrán két megvilágított kocka látható. Bár mindkét lehetőség színes, az árnyékkocka meggyőzőbb, mint a kocka nélkül.

Mi az árnyék?

Koncepcionálisan, az árnyék rajzolása elég egyszerű. Árnyék akkor jön létre, amikor a tárgy bezárja a fényt a fényforrásból, és megakadályozza, hogy elérje az objektum mögötti objektumot vagy felületet, amely az árnyékot hozta létre. Az árnyékolt tárgy felületének területe, amelyen az árnyékoló objektum vázlata átfedi egymást, sötétnek tűnik. Az eredeti objektumot az objektumot tartalmazó felület síkjára vetítve egy programozható árnyék hozható létre. Ezután a tárgy fekete (vagy más sötét színű), esetleg részben áttetsző

Shadows in opengl
Shadows in opengl

Számos módszer és algoritmus létezik az árnyékoláshoz (beleértve a meglehetősen összetetteket is). Mivel a könyv fordítják főleg OpenGL szoftver interfész, reméljük, hogy a mastering szoftver, meg fogja találni ideje tanulni a szakirodalomban javasolt függelék, beleértve azokat, amelyek a matematikai apparátus, amely alapján a programozott megközelítést. 18. fejezet, „A szerkezeti mélységet és növényzet,” tárgyalt több olyan közvetlen támogatást létre árnyékok OpenGL; Ebben a fejezetben elegendő bemutatni az egyik legegyszerűbb módszert, amely jól mûködik, amikor sötét felületeken (például a földön) alkalmazzák az árnyékokat. Az ilyen kialakítás folyamatát az 1. ábra szemlélteti. 5.40.

Shadows in opengl
Shadows in opengl

Az objektum vetületeinek egy másik felületre való felvételéhez nemtriviális mátrix műveleteket használunk, amelyeket az előző fejezetben meghatároztunk. Most megpróbáljuk csökkenteni a folyamatot a legegyszerűbb fogalmakra és cselekvésekre.

Átfedés overlay kód

Tehát a modell megfigyelésének tervezett mátrixát "lefedni" kell, hogy az összes benne ábrázolt objektum kétdimenziós formában legyen. Függetlenül attól, hogy az objektum tájékozódott-e, az a síkra lapolódik, amelyben árnyéka fekszik. Egy másik dolog, amit figyelembe kell venni két paraméter: a távolság a fényforrás és a sugárirányt. A fényforrás sugarainak iránya határozza meg az árnyék alakját, és befolyásolja annak méretét. Ha valaha látta az árnyékot kora reggel vagy késő reggel, akkor tudod, hogy mennyi ideig és csavarva lehet, attól függően, hogy milyen a Nap.

Listán látható 5.8 gltMakeShadowMatrix glTools funkciója a könyvtár veszi érvek a három pontot a síkon, ahol az árnyék zhe ugat (ez a három pontot nem fekszenek egy egyenes vonal), a helyzet a fényforrás és a transzformációs mátrix index, amelyet az épület funkcióját . Mi nem megy a dzsungelbe a lineáris algebra, de tudnia kell, hogy ez a funkció megjeleníti az együtthatók a gép, amelyet található egy árnyék, és az ő segítségükkel, figyelembe véve a helyzet a fényforrás, épít egy transzformációs mátrixot. Ha ezt a mátrixot megszorozzuk a modell aktuális megfigyelési mátrixával, akkor a későbbiekben rajzolt objektumokat erre a síkra vetítjük ki.

Példa egy árnyékra

Annak igazolására, a használata a látható funkció az 5. lista 8 szuszpenziós jet a levegőben a föld felett a fényforrás van elhelyezve, a fenti, és kissé balra a repülőgép A repülőgép nyilakkal lehet forgatni, amíg a földön megfelelő módon változik az árnyék kimenete a megfelelő SHADOW programot az 5. ábrán 41 látható

Az 5-9. Listában szereplő kód mutatja az árnyék vetítési mátrix létrehozásának módját. Vegyük észre, hogy a mátrixot egyszer már létrehoztuk a SetupRC függvényben és rögzítettük egy globális változóban!

Shadows in opengl

Listing május 10. az a kód megjelenítő rendszer „repülőgépen egy árnyék” Kezdetben, felhívjuk a földön, akkor ábrázolják a repülőgép (szokás szerint), állítsa vissza a megfigyelési mátrix modell és szorozza meg az árnyék a mátrix Tehát a kívánt mátrixát árnyékokat. Ezután ismét felhívjuk a gépet. (Mi már módosította a kódot, és most tart egy címkét tájékoztatása DrawJet funkció, hogy végezzen egy színes vagy fekete-fehér képalkotás) visszaállítani mérésmátrix modell, rajzoljon egy kis sárga gömb közelítő helyzete a fényforrás jébe kidolgozása előtt síkban sík volt tiltva, akkor ellenőrizze a mélység a téglalap rejlik ugyanabban a síkban, ahol az árnyékban készült, és biztosítanunk kell, hogy az árnyékban készült. Nem beszéltünk arról, mi történik, ha két tárgyat vagy síkot rajzolunk egy helyen. Azonban a mélységi vizsgálatot úgy tekintettük, mint az objektumok sorrendjének meghatározására szolgáló eszközt. Ha két tárgy foglalja el ugyanazt a helyet, általában azt mutatja, csak az utolsó rajzolja meg az alakzatot Előfordul azonban, hogy mivel a rossz irányú felbontás értékeket bekövetkezik egy teljes káosz - a képpontok jelennek vegyes kijelző tartozó különböző tárgyakat (z tűzoltó)

Visszatérve a gömbök világába

Az utolsó példa túl nagy ahhoz, hogy teljes forráskódot formáljunk.Az előző fejezetben a SPHEREWORLD programra tekintettünk, amely háromdimenziós lakott világot teremt animációval és kameramozgással. Ebben a fejezetben ismét visszatérünk a gömbök világába, és hozzáadjuk a "lakosság" (torus és gömbök) fényforrásokat és anyagi tulajdonságait. Ráadásul a sötét árnyékolásának technológiáját használva árnyakat hozunk létre a földön! Mint korábban már említettük, időről időre visszatérünk erre a példára, hozzáadva a vizsgált OpenGL függvényeket. A 5.42-es verzió például bemutatja a SPHEREWORLD program eredményét, figyelembe véve az ebben a fejezetben vizsgált anyagokat.

Shadows in opengl

Kapcsolódó cikkek