Információk a 3D modellek koordinátatranszformációjáról
lényeg
elsőként
Gyakran láthat 3D-s képeket a TV-képernyőkön és a játékok kijelzőin, de hogyan jelenítheti meg a 3D-s térben létező objektumokat, például a képernyőn mozgó karaktereket és épületeket egy 2D-s képernyőn?
A 2D-s játékokban koordinátaértékként csak "X és Y" kétdimenziós elemei vannak, és a kijelző is 2D-s, így ha X és Y koordinátapozíciójának megadásával rajzolsz egy objektumot, akkor intuitív módon meg fogod érteni, hogyan melyik pozícióban lesz megrajzolva.
A 3D-ben azonban ez nem olyan egyszerű. Ahogy a neve is sugallja, a 3D "3 dimenziós", és három koordinátainformációval rendelkezik: "X, Y és Z". Mivel a koordináták eltérnek a 2D-s megjelenítéstől, nem lehet úgy rajzolni az objektumot, ahogy van.
Ezután azt kell tennie, hogy "a háromdimenziós információt kétdimenziós információvá alakítja". Ezt általában "koordinátatranszformációnak" nevezik. Ne feledje, hogy ez a koordináta-transzformáció elengedhetetlen a 3D programozáshoz.
A 3D-ből 2D-be konvertáláshoz többféle koordináta-transzformáció létezik, de a programozók által kezelt koordináta-transzformációknak három fő típusa van: "világátalakítás", "transzformáció megtekintése" és "vetítési transzformáció". Itt mindent elmagyarázunk, ami a koordinátatranszformációval kapcsolatos.
Balkezes és jobbkezes koordináta-rendszerek
A 3D-ben két koordináta-rendszer van, a "balkezes koordináta-rendszer" és a "jobbkezes koordináta-rendszer", amelyek különböző tájolásúak az egyes koordinátákhoz, amint az az alábbi ábrán látható.
A Direct3D elsősorban balkezes koordináta-rendszert használt, de vannak függvények a jobbkezes koordináta-rendszerek kiszámításához is. Az XNA azonban csak jobbkezes koordináta-rendszerekhez biztosít számítási módszereket. Úgy tűnik, hogy ez összhangban van azzal a ténnyel, hogy más alkalmazások gyakran jobbkezes koordináta-rendszereket használnak.
Az oldalon található összes XNA tipp a jobbkezes koordináta-rendszert használja.
Helyi koordináta-rendszer (modell koordináta-rendszer)
Minden modellnek van egy koordináta-rendszere, amelynek középpontjában az origó áll. Amikor modellező szoftverrel hoz létre modellmodellt, azt hiszem, könnyebb megérteni, ha elképzeli, hogy az eredetet hozza létre központként.
Világ koordináta-rendszer
A világ koordinátarendszere lehetővé teszi a modell elhelyezését bárhol. Ha nem teszel semmit ebben a világátalakításban, a modell ugyanúgy kerül az origóba, mint a helyi koordináták. Az elhelyezés nemcsak az eredettől való elmozdulás, hanem a forgatás és a méretezés is.
Koordináta-rendszer megtekintése
Miután elhelyezte a modellt a világ koordinátáiban, információra van szüksége arról, hogy hová néz, és hová néz a 3D térben. Ezt nevezzük "nézetátalakításoknak". A nézetátalakításokat általában kameraként ábrázolják.
Az átalakításhoz szükséges paraméterek a következők: "kamera pozíciója", "érdekes kamerapont" és "kamera felfelé irányuló iránya". A kamera tájolását ez a három paraméter határozza meg. Az alábbi ábra a kamerát harmadik fél szemszögéből mutatja.
Az alábbi ábra valójában a kamera szemszögéből látható, a fenti ábrán látható elrendezéssel (ezen a ponton még nem konvertáltuk a koordinátákat a képernyőre, így ez csak egy kép).
Az előző magyarázatban úgy tűnik, hogy a kamera pozícionálva van, és a koordináták átalakulnak, de a tényleges számítás során a világ koordinátáit a kamera helyzetének és tájolásának megfelelően konvertálják. Ezért az origó a kamera pozíciója, amint az az alábbi ábrán látható.
Projektív koordináta-rendszer
Miután eldöntötte, hogy melyik pozícióból szeretné megtekinteni a 3D-s teret, a következő lépés a "kis tárgyak, amelyek messze vannak" és a "nagy dolgok, amelyek a közelben vannak" megjelenítésének feldolgozása. Ezt projektív transzformációnak nevezik. A vetítési transzformációnak két módja van, a "perspektivikus vetítés" és az "ortografikus vetítés", de az általánosan használt "perspektivikus vetítés" kép a következő.
A perspektivikus vetítés a következő paramétereket használja: Látószög, Képarány, Elülső klip pozíciója és Hátsó klip pozíciója. A fenti ábrán "frustum" feliratú terület végül megjelenik a képernyőn.
A "Látószög" a fényképezőgép által látható látótávolságot határozza meg. A szög csökkentésével nagyít, a növelésével kicsinyít. A látószög a frustum függőleges értéke lesz.
A képarány a vízszintes látószög meghatározására szolgál, míg a látószög függőleges szög. A vízszintes szöget általában a "látószög × képarány" határozza meg, és a képarány alapvetően a megjeleníteni kívánt képernyő "szélességének ÷ magasságának" értéke. Ha módosítja ezt az értéket, a megjelenített 3D objektum vízszintesen vagy függőlegesen nyúlik.
Az Elülső klip pozíciója és a Hátsó klip pozíciója annak meghatározásához van megadva, hogy az objektum az első vagy a hátsó tartományban jelenjen-e meg. A számítógép jellegéből adódóan nem lehet a végtelenségig megjeleníteni, ezért korlátot állítunk fel. Ez az érték befolyásolja a Z-puffer pontosságát is, ezért nem ajánlott azt a rajzterületre felvenni azon a tartományon túl, amelyet nem kell megjeleníteni.
A perspektivikusan átalakított objektum az alábbihoz hasonló térré alakul. A kamerához közel lévő objektumokat a program kinagyítja, a távolabbi objektumokat pedig lekicsinyíti.
Ezt az alábbi könnyen érthető ábra szemlélteti.
Ha valóban a kamera szemszögéből nézzük, akkor az alábbiak szerint néz ki.
A projektív transzformáció másik módszere az ortografikus vetítés, amely egy látható területet vetít ki, mint például az alábbi. Mivel a szélesség és a magasság a mélységtől függetlenül állandó, az objektum mérete nem változik a mélységgel.
Képernyő koordináta-rendszere
A vetítési transzformáció után a tényleges képernyő koordinátáira konvertálódik. Annak ellenére, hogy ez egy képernyő, a kijelző helyzete és tartománya az eszközön beállított nézetablak-beállításoktól függően változik. A játékok esetében azonban az ablak kliens koordinátái gyakran a nézetablak, így nem hiszem, hogy túl sokat kell aggódnia.
A képernyő koordinátái (0, 0) a vetítési koordinátákból (-1, 1, z) konvertálódnak. Hasonlóképpen, a képernyő koordinátáit (szélesség, magasság) a vetítési koordinátákból (1, -1 ,z) konvertálják.