6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése 6.2. Térbeli alakzatok képe 6.3. Térbeli képelemek és modell-adatszerkezetek 6.4. Képelemek összeállítása, leképezés és vágás (6.1-6.4 jórészt a 3. fejezet megfelelő részeit idézik föl.) 6.5. Láthatóság, takarás 6.6. A fénysugár-követési módszer 6.7. Árnyalás, a képpontok színe 6.8. Irodalom 6.9. Egyebek
6.1.Bevezetés: a 3D grafikus szerelőszalag fölépítése AP, GM, GRASZ (pl. OpenGL) Szerelőszalag: alapműveletek sorozata - Képelemek összeállítása: - Leképezés a VKR-ből a KKR-be,. - Vágás: a kívül eső képrészek elhagyása. - Láthatóság-takarás. - Árnyalás és textúra. - Utókezelés: különböző módszerek az elkészült kép minőségének javítására. KR: VKR, SKR, TKR, SZKR, NPKR, KKR Gyorsítás: dobozolás, térfelosztás, rendezés, koherencia
6.2. Térbeli alakzatok képe Térbeli látás: tanult, két szemmel Fénykép, TV: „egy szemmel” – ezt is megtanultuk A térbeliség mozzanatai (depth-cues) - testek takarása - megvilágítás - árnyékok, a fény visszaverődése - a méretek látszólagos távolsági csökkenése - párhuzamosok látszólagos távolsági összetartása - levegő perspektíva: színeltolódás, kontúrok elmosódása - megszokott jelek (féknyomok az úton) - kinetikus mélységhatás: a távolabbi lassabban mozog Ezeket utánozzuk; mennél jobban, annál drágábban
Emberi látás és a képernyő Látómezőnk: 120x100 fok, ovális Képernyőnk (50 cm-re): 40x30 fok tájkép: egy szűk ablakon át nézünk a világra A szem fölbontása: 1 szögperc A képernyő raszter-távolsága: 0,25 mm, 2 szögperc
6.3. Színterek geometrikus kódolása Leírónyelv (eseti teszt-leírás, vagy pl. VRML) teszt-adatok, archiválás, adatcsere Adatszerkezet (eseti, vagy GMR) dinamikus építés dinamikus elhalás Poligon: különböző méretű cellák poligon: n, Pi, n, ni, doboz, P,Q,R, … GRASZ-hívások sorozata (pl. OpenGL)
A képet meghatározó adatok A testek geometriája és a felületek anyaga (színe) Nézet (kamera) Megvilágítás (fényforrások) Időbeli változások
Térbeli „képelemek” 2 helyett 3 koordináta háromszög-sáv négyszögháló
A szerelőszalag fölépítése és műveletei · Alkalmazási Program, Geometriai Model GRAfikus alapSZoftver: rajzolás alapműveletek sorozata: szerelőszalag képelemek előkészítése a VKR-ben · leképezés a tárgytérből a képtérbe, · képkivágás; a képkereten kívüli képrészek elhagyása · láthatóság-takarás: takart elemek elhagyása (3D) · raszter-konverzió: a képpontok színe (képpont-puffer)
A szerelőszalag műveletei 1. Képelemek előkészítése geometriai elemből képelem(ek), elhelyezés a VKR-ben 2. Leképezés a VKR-ből a KKR-be 3. Képkivágás a kereten kívüli részek elhagyása 4. Láthatóság-takarás a takart elemek elhagyása (főleg 3D-ben) 5. Raszter-konverzió az elemet szemléltető képpontok előállítása, a képpontok színe, a képpont a KPP-be
6.4. Szesza 1: Képelemek összeállítása SKR -> VKR - hasonlósági transzformáció: TSR - összetett tárgyak hierarchiája Geometriai elemekből képelemek
A képelemek előkészítése Rajzoláskor: az AP bejárja a geometriai modellt, kiválasztja az elemeket, és átadja a GRASZ-nak. A GRASZ egyenként átveszi az elemeket és ráteszi a szerelőszalagra A sze.-sza. első művelete: a képelemek előkészítése geometriai elem helyett képelem(ek) és a képelemek elhelyezése: SKR -> VKR (eltolás, forgatás, léptékezés)
K: kereszt alak, saját SKR-jében H: háromszög alakú luk, saját SKR-jében K: kereszt alak, saját SKR-jében K’: lukas kereszt SKR-jében: K’=K+SiNiH S: sáv széleivel (V) és lukas keresztekkel: S = V + Sj MjK’ = V + Sj Mj( K + Si NiH ) Mj és Ni: transzformációk.
A szerelőszalag műveletei 1. Képelemek előkészítése 2. Leképezés 3. Képkivágás 4. Láthatóság-takarás 5. Raszter-konverzió
6.4. Szesza 2: Leképezés Középpontos- vagy párhuzamos vetítés Elvileg: VKR -> KKR Gyakran: VKR -> NPKR NPKR-ben láthatóság-takarás A fénysugár-követésnél: a képernyő rasztert vetítjük a SZKR-be és ott számolunk.
Leképezés a tárgytérből a képtérbe A tárgyak leképezése a tárgytérből a képtérbe Koordináta-transzformáció A pontok helyvektorának szorzása a leképezés mátrixával: P’ = M ·P
2D Leképezés: Nézetmező (keret), tárgytér: GsetWCSFrame(Kba,Kjf:Gpoint2); Képmező, képtér GsetSCSViewPort(Mba,Mjf:Gpixel); Leképezés: GmapWCStoSCS(P:Gpoint2; P1:Gpixel);
3D Leképezés: Párhuzamos, vagy középpontos vetítés VKR->KKR3 Nézetmező: csonkagúla 3D képmező: téglatest Kép: síkvetület a téglatest alapjára Előtte: takarások (láthatóság) a téglatestben (5-6. Fejezet)
A szerelőszalag műveletei 1. Képelemek előkészítése 2. Leképezés 3. Képkivágás 4. Láthatóság-takarás 5. Raszter-konverzió
6.4. Szesza 3: Vágás Nézetmező: csonkagúla: Cyrus-Beck-3D NPKR téglatest: Cohen-Sutherland-3D Mélységvágás: Közelsík és távolsík Oldalvágás: x-y-ban; síkbeli feladat
Képkivágás A kép keretén kívül eső képrészek elhagyása. Vágó-tartomány (mire, mivel vágunk?): téglalap (téglatest), vagy félsík (féltér) A vágott elemek (mit vágunk?): minden képelem típusra más-más vágó eljárás! Legtöbbször a képtérben, de lehet a tárgytérben is.
Normálvektoros szakasz vágás a síkban (a Cyrus-Beck eljárás) Adott: a PQ szakasz és egy félsík h határegyenese; R pontjával és n normálisával. Keressük a PQ szakasznak a félsíkba eső részét (PM)
sg(P) = n(P-R) (előjel!) Észrevétel: sg(P) > 0, ha P a félsíkban = 0, ha P a határon < 0, ha P kívül van. Ha sg(P) és sg(Q) >= 0: mindkettő belül, a szakasz „triviálisan látható” Ha sg(P) és sg(Q) < 0: mindkettő kívül, a szakasz „triviálisan eldobható” Különben: „vágni kell”: M = a h és PQ metszéspontja
Az M pont kiszámítása: Az M pont rajta van a határon: (M-R)n = 0, azaz: (mx - rx)nx + (my - ry)ny = 0 Az M rajta van a PQ szakaszon: M = P + t (Q - P), valamilyen t paraméterrel, azaz: mx = px + t (qx – px) és my = py + t (qy – py);. Három egyenlet, három ismeretlen: t, mx, my; megoldás mindig van (ha nem „triviális” a helyzet)
Megjegyzések: Tetszőleges konvex n-szögre: mindegyik határra, egymásután. Tengelyállású téglalapra: 4x a P és Q sarok kétszer-kétszer, az n vektor: (0,1), illetve (1,0) A térben: szakasz vágása féltérre; (M-R)n = 0 skalár-egyenlet és M = P + t (P – Q) három skalár-egyenletet ad. A térben is: téglatestre és tetszőleges konvex sokszöglapra (poliéderre) alkalmazható.
Cohen-Sutherland szakasz-vágás a síkban Adott: a PQ szakasz és Egy téglalap b, a, j, f (bal-alul-jobb-felül) határaival Keressük a PQ szakasz téglalapba eső részét.
A végpontok BAJF-kódja: BAJF(P)=1000, ha balra kívül, van 0110, ha alul és jobbra kinn 0000, ha belül van. Belül BAJF(P)=0 a sarkokban 2 bit 1-es, másutt 1 bit 1-es. BAJF(P) : négy összehasonlítás „Triviális vizsgálatok”: ha BAJF(P)=0 és BAJF(Q)=0: „triviálisan belül” ha BAJF(P) & BAJF(Q) 0 : „triviálisan eldobható” Különben „vágni” kell
Térbeli elemek vágása Normálvektoros vágás: féltér, téglatest, konvex soklap (poliéder) például: a nézetmező csonkagúlája (6. Fejezet) Cohen-Sutherland: téglatest, 27 mező, BAJFEH-kód Mélység-vágás: a Z tengelyre merőleges „közelsík” és „távolsík” Oldal-vágás: XY irányban; síkbeli vetületben
6.5.- … a Szesza folytatása Láthatóság-takarás; a képpontokban látható felület-elemek Árnyalás és textúra; a képpontok színe. Utókezelés: az elkészült kép minőségének javítására.