2010. június 2., szerda

Pozíció és irány megadása virtuális világban

Pozicionálni valamit egy abszolút koordináta-rendszerben könnyű. Minden objektumnak három koordinátája van. Ezek gyakran a vektornak nevezett adattípusban tárolódnak, ez fogalom egymáshoz tartozó számokat takar. Általában a világ minden objektumát ennek középpontja definiálja, és felszínének minden koordinátája saját (0,0,0)-s pontjához viszonyul. Ez rettentő nagy segítség az objektum forgatásánál, úgyhogy erősen ajánlom használatát. Aztán az objektumnak magának is van egy pozíciója a térben. Az objektum megrajzolásánál pontjainak koordinátái hozzáadódnak a pozíciójához. Egy relatív koordináta-rendszerben a pozíció tehát nagyjából egyenletes. A nézőpont pozíciója mindig a (0,0,0) vektor. A többi objektum ugyanolyan típusú rendszert követ, abszolút koordináta-rendszer.

Irány megadása a virtuális világban

Az irány definiálása elég trükkös lehet. Az elkövetkezőkben gyakran cserélgetek majd pár fogalmat. A háromdimenziós térben az irányt két és fél szög definiálja. "Kettő és fél?" - kérdezheted. Nos, majdnem mindenki hármat használ, mert kettő mégsem elég, de ha nagyon műszakiak akarunk lenni, az egyik szög csak nullától száznyolcvan fokig terjed (nullától pi/2-ig radiánban). De feltételezve ezt, venni kell egy irányt a nézetnek. Én részemről előnyben részesítem, ha az x tengely a képernyő közepén balról jobbra halad. Szintén szeretem, ha az y tengely a képernyő aljáról felfelé, illetve ha a z tengely tőlem a képernyő belseje felé tart. A plusz-, mínuszjelek és az utánrendelés bitjének trükkös kezelésével elérhető, hogy az összes itteni matematikai művelet módosítható a koordináta-rendszer néhány irányának tükrözésére. Néhányan szeretik, ha az y tengely a képernyő belseje felé, a z tengely pedig függőlegesen nő. Ez csupán attól függ, hogyan akarod definiálni a dolgot.
Feltételezve, hogy beleegyeztél, hogy a z a képernyő belseje felé tart, milyen három szögre is van szükséged? (Itt a legnagyobb a fogalmak keverésének veszélye.) Szükséged van a roll, pitch és yaw mozgásokra. Figyeld a monitort, miközben ezt olvasod. Most döntsd jobbra a fejed, hogy a jobb füled a jobb válladra kerüljön. Ez a változás roll irányban történt (én legalábbis így hívom). Most ülj ismét egyenesen. Döntsd előre a fejed, hogy az állad elérje a mellkasod. Ez a mozgás a pitch volt. Most pedig a fejedet egyenesen tartva, nézz hátra a jobb vállad felett, hogy megnézd, ki van mögötted. Ez volt a yaw. Ezek az alapok, de mihez kezdjek velük? Nos, elértünk oda, ahol egy remek kis mátrixalgebra könyv jól jöhet. Az előbbi három szöget fogjuk majd használni egy transzformációs mátrix létrehozásához.

Képszintézis

A képszintézis (rendering vagy image synthesis) célja a virtuális világunk lefényképezése. A fényképezés során többféle látásmódot alkalmazhatunk. A két legkézenfekvőbb módszer a rajzolás és a természet folyamatainak a szimulálása. Az első esetben a keletkezet képek műszaki rajzszerűek lesznek, a második esetben pedig a keletkező képek annyira fognak hasonlítani a valódi képre, mint amennyire követtük a szimuláció során a fizika törvényeit. A legnagyobb különbség az így előállított képekben az egyes képkockák kiszámítására fordítható idő. Egy interaktív alkalmazásban ennek a másodperc törtrésze alatt végbe kell, hogy menjen, míg más esetekbe határt maximum a megrendelő pénze és türelme szabhat. Ebből következően a felhasználható matematikai módszerek is jóval összetettebbek lehetnek, sokkal több kiinduló adattal dolgozhatnak, még pontosabban szimulálva a valós viszonyokat. Ezért az igazán valósághű képek elállítását fotorealisztikus képszintézisnek nevezzük. Valósághűen azt értjük, hogy a számítógép monitorán megjelent kép, nagymértékben hasonlítani a valóságos képhez. Képszintézises rendszerek létrehozásához tehát ismernünk kell a fény-anyag kölcsönhatását, alapvető fizikai törvényeit, modelljét, a megjelenti rendszerek képességeit és az emberi szem korlátait.
Ahhoz, hogy a képszintézist maximálisan ki tudjuk használni (vagy, hogy egyáltalán használni tudjuk) meg kell ismerkednünk az emberi szem felépítésével és a látással. A természetben a fény valamilyen forrásból szabadul fel, energia felhasználásával, majd igen nagy sebességgel haladni kezd a tér minden irányába. Útja során rengeteg tárgyba ütközhet, onnan visszaverődhet, elnyelődhet, de végül egyes sugarak a szemünkbe jutnak. A szem a szerkezet és a funkció csodája, amelyből a látóideg ered, ez biztosítja a szem és az agy között az összeköttetést. A beérkező sugarak a retinán lévő érzékelősejtekbe (csapok, pálcikák) csapódnak, ahol aztán a fény jellemzőitől függő ingerület keletkezik. Amelyet majd az agyunk fog értelmezni, és állítja elő belőle a képet. Ebből arra következtethetünk, hogy csak akkor látunk egy tárgyat, ha arról a szemünkbe visszavert fénysugarak jutnak, különben nem érzékelünk semmit. A fény természetesen a felültre való visszaverődése közben megváltozik, hiszen egyes komponensei elnyelődnek tehát a fény színe is megváltozik. Ezek szerint viszont a tárgy színe is függ a megvilágított fény színétől. Csak a fehérben, azaz a minden szint tartalmazó fényben látszik egy tárgy valódi színe. Például egy zöld tárgy kék fényben kéknek látunk, mivel a fényből hiányzik a sárga komponens, piros fényben pedig feketének. Az emberekre a fény nem csak fizikailag, hanem érzelmileg is hatással van. Szeretünk mindenféle színhez különböző érzelmeket társítani, ezért ma már szinte az összes 3D játék engine képes a színes fények kezelésére. Hiszen a fények manipulálásával megfelelő hangulatot tudnak teremteni, a játékos számára. Természetesen az emberi szem tulajdonságait, sok esetben a hasznunkra tudjuk majd váltani, hiszen a bonyolult fizikai modellek megoldásához roppant kevés idő áll rendelkezésre. Gondoljunk csak egy adott valós idejű képsorozatra, amit a napsugár megvilágít. Ahhoz, hogy a mozgás folyamatosnak tűnjön másodpercenként legalább 15 képkockát, kell majd előállítanunk. Mivel egy közepesnél nagyobb képernyő képe viszont több mint egymillió képpontból áll, egyetlen képpont színének meghatározásához legalább 1 sec/15/10^6 = 40 nsec áll rendelkezésre. Ami az operatív tár egyetlen memória ciklusánál is kisebb!!! Ezt a tényt a képszintézis során nem szabad figyelmen kívül hagynunk.

Felhasznált és ajánlott irodalom

Foley, van Dam, Feiner, and Hughes: "Számítógépes grafika: Alapelvek és gyakorlat" c.
Dr. Szirmay-Kalos László: Számítógépes grafika, 2001

Füzi János: Interaktív grafika, 1997

0 megjegyzés :

Megjegyzés küldése