Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A mátrix-átalakítások a 3D-s ábrák alacsony szintű matematikáinak nagy részét kezelik.
A geometriai adatfolyam bemenetként csúcsokat fogad. Az átalakító motor alkalmazza a világ-, nézet- és vetítési transzformációkat a csúcsokra, letöri az eredményt, és mindent továbbít a raszterizátornak.
| Átalakítás és tér | Leírás |
|---|---|
| Modellkoordináták a modelltérben | A folyamat elején a modell csúcsai egy helyi koordinátarendszerhez képest vannak meghatározva. Ez egy helyi eredet és tájolás. A koordináták tájolását gyakran modelltérnek is nevezik. Az egyes koordinátákat modellkoordinátának nevezzük. |
| Világ átalakítása világtérbe | A geometriai folyamat első szakasza átalakítja a modell csúcsait a helyi koordinátarendszerből egy olyan koordinátarendszerbe, amelyet a jelenet összes objektuma használ. A csúcspontok átrendezésének folyamatát Világ transzformációnevezik, amely a modelltérből egy világtérnevű új tájolássá alakítja át. A világűr minden csúcspontja világkoordináta használatával van deklarálva. |
| Nézet átalakítása nézettérbe (kameratér) | A következő szakaszban a 3D-s világot leíró csúcsok a kamerával való viszonyuk alapján kerülnek beállításra. Az azt jelenti, hogy az alkalmazás kiválaszt egy nézőpontot a jelenethez, és a világtér koordinátáit áthelyezi és elforgatja a kamera nézete körül, ezzel a világtérből nézettér lesz (más néven kameratér). Ez a Nézet átalakító, amely átalakítja a világtérből nézeti térbe. |
| A vetítési térbe történő kivetítési transzformáció | A következő fázis a Vetítési transzformáció, amely a nézettérből a vetítési térbe konvertálja. A folyamat ezen részében az objektumok általában a nézőtől való távolságukkal vannak skálázva, hogy a mélység illúzióját adják egy jelenetnek; a közeli objektumok a távoli objektumoknál nagyobbnak tűnnek. Az egyszerűség kedvéért ez a dokumentáció arra a térre hivatkozik, amelyben a csúcsok a vetítés átalakítása után léteznek, vetítési tér. Egyes grafikus könyvek hivatkozhatnak a vetítési térre mint perspektíva utáni homogén térre . Nem minden vetítési átalakítás skálázza a jelenetben lévő objektumok méretét. Az ilyen kivetítést néha affinnak vagy ortogonális kivetítésneknevezik. |
| Kivágás képernyőtérben | A folyamat utolsó részében a képernyőn nem látható csúcspontok el lesznek távolítva, így a raszterizátor nem vesz igénybe időt a színek és árnyékolás kiszámításához olyan dologhoz, amely soha nem lesz látható. Ezt a folyamatot kivágásnaknevezik. A kivágást követően a rendszer a többi csúcspontot a nézetport paramétereinek megfelelően skálázza, és képernyőkoordinátává alakítja. Az eredményül kapott csúcsok, amelyek a jelenet raszterizálásakor láthatók a képernyőn, a képernyőtérben. |
Az átalakításokkal objektumgeometriát alakíthat át egyik koordinátatérből a másikba. A Direct3D mátrixokat használ a 3D átalakítások végrehajtásához. Mátrixok 3D-átalakításokat hoznak létre. A mátrixok kombinálásával egyetlen mátrixot hozhat létre, amely több átalakítást is magában foglal.
Átalakíthatja a koordinátákat a modelltér, a világűr és a térnézet között.
- Világ transzformációja – Modelltérből világ térbe alakít át.
- Nézet transzformáció – A világ térből a nézet térbe alakít át.
- Kivetítés átalakítása – A nézettérből a vetítési térbe konvertálja.
Mátrix-átalakítások
A térhatású ábrákat használó alkalmazásokban geometriai átalakításokkal végezheti el a következőket:
- Egy objektum helyének kifejezése egy másik objektumhoz viszonyítva.
- Objektumok elforgatása és méretezése.
- A megtekintési pozíciók, az irányok és a perspektívák módosítása.
Bármelyik pontot (x,y,z) átalakíthatja egy másik ponttá (x', y', z') egy 4x4-alapú mátrix használatával, ahogyan az az alábbi egyenletben látható.
Hajtsa végre a következő egyenleteket az (x, y, z) és a mátrixon a pont létrehozásához (x', y', z').
A leggyakoribb átalakítások a fordítás, a forgatás és a skálázás. Az ilyen hatásokat okozó mátrixokat egyetlen mátrixba kombinálva egyszerre több átalakítást is kiszámíthat. Létrehozhat például egyetlen mátrixot egy sor pont fordításához és elforgatásához.
A mátrixok sor-oszlop sorrendben vannak megírva. Az egyes tengelyek mentén egyenletesen skálázó mátrixot, az úgynevezett egységes skálázást a következő mátrix jelöli matematikai jelöléssel.
A C++-ban a Direct3D mátrixokat deklarál kétdimenziós tömbként mátrixstruktúra használatával. Az alábbi példa bemutatja, hogyan inicializálhat egy D3DMATRIX struktúrát egységes skálázási mátrixként (skálázási tényező "s").
D3DMATRIX scale = {
5.0f, 0.0f, 0.0f, 0.0f,
0.0f, 5.0f, 0.0f, 0.0f,
0.0f, 0.0f, 5.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
Fordítás
Az alábbi egyenlet a pontot (x, y, z) egy új pontra (x', y', z') fordítja le.
A C++-ban manuálisan is létrehozhat fordítási mátrixot. Az alábbi példa egy olyan függvény forráskódját mutatja be, amely mátrixot hoz létre a csúcspontok lefordításához.
D3DXMATRIX Translate(const float dx, const float dy, const float dz) {
D3DXMATRIX ret;
D3DXMatrixIdentity(&ret);
ret(3, 0) = dx;
ret(3, 1) = dy;
ret(3, 2) = dz;
return ret;
} // End of Translate
skálázás
Az alábbi egyenlet a pontot (x, y, z) az x-, y- és z-irányok tetszőleges értékeivel egy új pontra (x', y', z') skálázza.
Forgatás
Az itt ismertetett átalakítások balkezes koordináta-rendszerekhez tartoznak, így eltérhetnek a máshol látott transzformációs mátrixoktól.
Az alábbi egyenlet az x tengely körüli pontot (x, y, z) elforgatja, és létrehoz egy új pontot (x', y', z').
Az alábbi egyenlet elforgatja a pontot az y tengely körül.
Az alábbi egyenlet elforgatja a z tengely körüli pontot.
Ezekben a példában a mátrixokban a görög theta betű a forgási szöget jelöli radiánban. A szögeket az óramutató járásával megegyező irányban mérjük, amikor a forgástengely mentén az origó felé nézve.
Az alábbi kód egy függvényt mutat be, amely kezeli az X tengely elforgatását.
// Inputs are a pointer to a matrix (pOut) and an angle in radians.
float sin, cos;
sincosf(angle, &sin, &cos); // Determine sin and cos of angle
pOut->_11 = 1.0f; pOut->_12 = 0.0f; pOut->_13 = 0.0f; pOut->_14 = 0.0f;
pOut->_21 = 0.0f; pOut->_22 = cos; pOut->_23 = sin; pOut->_24 = 0.0f;
pOut->_31 = 0.0f; pOut->_32 = -sin; pOut->_33 = cos; pOut->_34 = 0.0f;
pOut->_41 = 0.0f; pOut->_42 = 0.0f; pOut->_43 = 0.0f; pOut->_44 = 1.0f;
return pOut;
}
Mátrixok összefűzése
Az mátrixok használatának egyik előnye, hogy két vagy több mátrix hatását kombinálhatja őket szorozva. Ez azt jelenti, hogy a modell forgatásához és egy adott helyre való fordításához nem kell két mátrixot alkalmaznia. Ehelyett a forgatási és a transzlációs mátrixokat összeszorozva olyan összetett mátrixot kapunk, amely az összes hatásukat tartalmazza. Ez a mátrixösszefűzésnek nevezett folyamat az alábbi egyenlettel írható.
Ebben az egyenletben a C az a komponált mátrix, amelyet készítenek, és az M₁-től Mₙ-ig terjedő Mátrixok az egyes mátrixok. A legtöbb esetben csak két vagy három mátrix van összefűzve, de nincs korlát.
A mátrix szorzásának sorrendje kulcsfontosságú. Az előző képlet a mátrixösszefűzés balról jobbra szabályát tükrözi. Vagyis az összetett mátrix létrehozásához használt mátrixok látható hatásai balról jobbra haladva jelennek meg. Az alábbi példában egy tipikus világmátrix látható. Képzelje el, hogy egy sztereotip repülő csészealj világmátrixát készíti. Valószínűleg meg szeretné pörgetni a repülő csészealjat a középpontja körül - a modelltér y tengelye körül -, és áthelyezni a jelenet egy másik pontjára. Ennek az effektusnak a végrehajtásához először létre kell hoznia egy forgatómátrixot, majd meg kell szoroznia egy fordítási mátrixtal, ahogyan az az alábbi egyenletben látható.
Ebben a képletben az Ry az y tengely körüli forgatás mátrixa, a Tw pedig a világ koordinátáinak egy bizonyos helyére való fordítás.
A mátrixok szorzásának sorrendje azért fontos, mert a két skaláris érték szorzásával ellentétben a mátrix szorzása nem inmutatív. A mátrixok ellenkező sorrendben való szorzása vizuálisan a repülő csészealjat világtéri helyzetébe helyezi, majd a világ kezdetpontja körüli elforgatását teszi lehetővé.
Függetlenül attól, hogy milyen típusú mátrixot hoz létre, ne felejtse el a balról jobbra szabályt, hogy a várt hatásokat érje el.
kapcsolódó témakörök