• Nem Talált Eredményt

A metszéspontok kiszámításának optimalizálása

In document 1.1. A számítógépes graka célja (Pldal 138-143)

A SZÁMÍTÓGÉPES GRAFIKA ALAPJAI

2.4. A sugárkövetési algoritmus

2.4.2. A metszéspontok kiszámításának optimalizálása

A legegyszer¶bb esetben, amelyben a sugárkövet® algoritmus csak az objek-tumok láthatóságát határozza meg, minden pixelre metszetszámításokat végez egy sugár és a 3D objektumok között. Ily módon, pl. egy 1024×1024 felbontású képerny®n, melyen 10 objektum van megjelenítve, 10 485 760 metszetszámolás szükséges. Ez hosszú id®t igényel még egy performens gép esetén is. Elvégzett mérések alapján megállapították [24], hogy a metszetszámolások 7595% id®t vesznek igénybe az egész algoritmus végrehajtási idejéb®l. Éppen ezért szüksé-ges ezen számolások optimalizálása és ezeknek csökkentése.

Azokban az egyenletekben, amelyekb®l megkapjuk egy sugár metszéspont-ját egy objektummal, sok tényez® állandó egy sametszéspont-játos sugárra vagy akár az egész képre nézve. Ezek a tényez®k el®re kiszámíthatók és felhasználhatók más olyan esetben, amikor a sugár egy ugyanolyan típusú objektumot metsz.

Módszereket fejlesztettek ki egy sugár és egy objektum metszésének gyors meghatározására. Például ha a sugár aztengely mentén halad, a metszéspontok kiszámítása egyszer¶södik, de ez a feltétel egy transzformációt von maga után mind a sugár, mind azon objektumok esetén, amelyeket metszhet a sugár. A transzformáció által meg kell határozni a legközelebbi objektumot, az-n történ®

mélységrendezéssel (depth-test). A metszéspont meghatározása után az inverz transzformációt kell alkalmazni az algoritmus folytatásához.

Szabálytalan objektumok esetén a metszési tesztek sok id®t emésztenek fel.

Ebben az esetben optimalizálni kell. Az egyik optimalizálási lehet®ség, ha az illet® objektumot beírjuk egy szabályos testbe: gömbbe, ellipszoidba, hengerbe, derékszög¶ parallelipipedonba stb. A metszetszámítások csak akkor hajtódnak végre, ha a sugár metszi a befoglaló testeket.

A sugárkövet® algoritmus gyorsítása befoglaló testek segítségével függ a tes-tek formájától. Például a gömböt gyakran használják befoglaló testként, mivel nagyon egyszer¶en lehet kiszámítani a metszéspontját egy sugárral, de egyik hátránya, hogy nem fogja be jól a nyújtott alakú objektumokat, a metszés kiszá-mításának az egyszer¶sége nem szabad az egyedüli kritérium legyen a befoglaló testek meghatározásánál.

Egy objektum metszései kiszámításának költségét a következ® összefüggés adja meg:

T =b·B+i·I,

ahol:T az összköltség;b a tesztek száma egy sugár és a befoglaló test között;

B a sugár és a befoglaló test közötti metszési teszt költsége;i a metszési tesztek száma egy sugár és az objektum között (i 6 b); I pedig a sugár és objektum közötti metszési tesztek költsége.

A két tényez® függ egymástól. A befoglaló test egyszer¶sítése maga után vonja aBcsökkenését, de ugyanakkorInövekedését.

Egy egyszer¶ befoglaló test egy konvex poliéder, amely négy pár párhuza-mos síkból áll. Ezek körbefogják az objektumot. A párhuzapárhuza-mos síkok 0, 45, 90, illetve 135-ra vannak megd®ltve a vízszinteshez képest [30].

Egy sugár metszése a befoglaló poliéderrel síkokkal történ® metszést von maga után. A metszéseket külön minden párhuzamos sík-párra teszteljük.

Legyen t1 a sugár és a meggyel®höz közelebb álló síkkal lev® metszet paramétere, és t2 a távolabb álló síknak megfelel® paraméter. Feltételezésünk alapjánt1< t2.

Egy sugár metszetét a befoglaló poliéderrel at1minimum értékek maximu-ma és at2maximum értékek minimuma adja meg.

Ha a végs®t1érték nagyobb lesz, mint a végs®t2érték, akkor a sugár nem metszi a befoglaló poliédert, és így nem metszi az objektumot sem. Ellentett esetben a sugár metszi a befoglaló testet, és ekkor meg kell vizsgálni, hogy a sugár metszi-e az objektumot vagy sem (a befoglaló test metszése szükséges, de nem elégséges feltétel).

2.5. Árnyalás

Raszteres (pixeles) megjelenít®kön a látható felületek színének és fényer®s-ségének helyes megválasztásával el®segíthetjük a tárgyak alakjának és tömörsé-gének érzékeltetését. Ezt nevezzük árnyalásnak.

A háromdimenziós színtér raszterképének valóságh¶sége az árnyalást el®-idéz® zikai jelenségek sikeres szimulációjától függ. Árnyalási modellt haszná-lunk a felület megjelenítésekor a fényer®sség és a szín kiszámításához.

Generatív számítógépes grakában a következ® árnyalási modellek terjed-tek el:

2.32. ábra. Szabálytalan test befoglaló poliéderének meghatározása 0, 45, 90, illetve 135-os síkokkal (metszet-kép)

drótvázas modell,

árnyalási poliéder használata, Gouraud-módszer,

Phong-módszer,

pontok független árnyalása.

Drótvázas modell (wireframe) esetén a geometriai modell három- és négy-szögekb®l áll, csak az élvonalak látszanak.

Árnyalási poliéder használata (at) esetén a megjelenítés a lapok független árnyalásával történik.

A Gouraud-módszer folytonos árnyalást állít el®. Mindegyik lap csúcspont-jaiban meghatározza a normálisokat, majd ezekb®l a csúcsok színét. A lapon belüli árnyalást a csúcsponti értékekb®l interpolálja. A Gouraud-módszer akkor jó, ha a lapon belül a szín valóban közelít®leg lineárisan változik. Ez igaz a diffúz visszaver®dés¶ objektumokra, de elfogadhatatlan tükrös, illetve spekulá-ris visszaver®dés¶ felületekre. A lineáspekulá-ris interpoláció ilyen esetben egyszer¶en kihagyhatja vagy szétkenheti a fényforrás tükröz®d® foltját.

A Phong-módszer is folytonos árnyalást állít el®, alapelve, hogy nem a szí-neket, hanem a normálvektorokat interpolálja, és ebb®l számítja ki minden pixel színét. Több számítást igényel, de valóságh¶bb eredményt ad. A Phong-módszer a színtérben nemlineáris interpolációnak felel meg, így nagyobb poligonokra is megbirkózik a tükrös felületek gyorsan változó radianciájával.

Pontok független árnyalásakor minden pontban egyenként meghatározzuk a normálvektort és ebb®l a pixel színét. A legpontosabb, de a leglassúbb számí-tási modell.

2.33. ábra. Gömb képe drótvázas, poliéderes, Gouraud-, Phong- és ponton-kénti árnyalással

2.6. A vágás

A generatív számítógépes graka segítségével el®állított grakus modell a teljes színteret magába foglalja, a számítógép képerny®jén azonban lehet, hogy ennek csak egy része fog látszani, egy része pedig kilóg a képb®l.

2.34. ábra. POV-Ray-ben el®állított színtér bevágása az ablakba A modellb®l mindig csak annyit szabad mutatni, amennyi látszik. Sem a takart, sem a képb®l kilógó részek nem szabad felkerüljenek a generált képre.

A következ®kben [61] alapján összefoglaljuk a vágás módszereit:

a modellt vágjuk le a megjelenítés el®tt, azaz számítsuk ki a metszés-pontokat, és az új végpontokkal rajzoljunk;

ollózás: pásztázzuk a teljes modellt, de csak a látható képpontokat jele-nítjük meg (ellen®rizzük minden(x, y)-ra);

a teljes modell legenerálása egy munkaterületre, majd innen másoljuk át a megfelel® látható részt.

A pontok vágása egyszer¶, egyP(x,y)pont akkor látható, haxmin6 x6 xmax, ésymin6y 6ymax, ahol(xmin, ymin),(xmax, ymax)az ablakot (képerny®t) körbefogó téglalap bal fels® és jobb alsó sarkának a koordinátái.

Vonalak, szakaszok esetén elegend® a végpontokat vizsgálni. Ha mindkét végpont belül van, akkor a teljes vonal belül van, nem kell vágni. Ha csak

egy végpont van belül, akkor ki kell számítani a metszéspontot a téglalappal és vágni kell. Ha mindkét végpont kívül van, akkor lehet, hogy nincs közös része a vágási téglalappal, további vizsgálat szükséges. A vágási téglalap minden élére megvizsgáljuk, hogy van-e az élnek közös része az egyenessel (egyenesek metszéspontjának a meghatározása, élen belül van-e a metszéspont?).

Vonalak vágására Cohen és Sutherland adott optimális vágási algoritmust bitkódok segítségével [88].

A CohenSutherland-féle szakaszvágáshoz el®zetes vizsgálatokra és kódo-lásra van szükség.

Legyen a szakasz két végpontja (x1, y1) és (x2, y2). Mindkét végpont a következ® táblázat szerint kódot kap (kód1, kód2), annak megfelel®en, hogy melyik tartományban van:

1001 1000 1010 0001 0000 0010 0101 0100 0110

Ha a végpontok belül vannak, akkor nincs mit vágni, mindkét végpont kódja: kód1= kód2= 0000 (triviális elfogadás).

Ha mindkét végpont a vágási téglalapon kívül van, ugyanazon az olda-lon, vagyis hax1,x2< xmin(***1), vagy hax1,x2> xmax(**1*), vagy hay1,y2 < ymin (*1**), vagy hay1,y2 > ymax (1***), akkor a szakasz nem látható, bittenként kód1ÉS kód2= 1 (triviális elvetés).

Különben a szakasz metszi a vágási téglalap valamelyik oldalát, tehát egy részét ki kell rajzolni (el kell fogadni), egy részét pedig nem (el kell vetni). Ekkor vegyünk egy küls® végpontot (legalább az egyik az, ha mindkett® az, válasszuk az els®t felülr®l lefelé és jobbról balra haladva), számítsuk ki a metszéspontot, a két részre bomlott szakasz egyik fele pedig az el®bbi pont alapján triviálisan elvethet®.

A CohenSutherland-féle szakaszvágás gyakorlati megvalósítását lásd a 6.4.

(Az OpenGL lehet®ségei, alapvet® rajzolási algoritmusok) fejezetben.

Körök, ellipszisek vágására fogjuk körbe az alakzatot egy kerettel (írjuk be a kört egy négyzetbe, az ellipszist egy téglalapba). Ha a keret belül van, akkor a kör vagy ellipszis is belül van, nem kell vágni. Ha a keret kívül van, akkor az alakzat is kívül van, nincs mit vágni. Különben: körnegyedekre (nyolcadokra) megismételjük a kör és él metszéspont-meghatározó eljárást, majd pásztázunk.

Sokszögek vágásánál sok esetet kell megvizsgálni. A SutherlandHodgman-algoritmus szerint sorba vesszük az éleket és egyenként vágunk.

In document 1.1. A számítógépes graka célja (Pldal 138-143)