Információk a 3D modellek koordinátatranszformációjáról

Oldal frissítve :
Oldal létrehozásának dátuma :

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.