Programozás directx9 objektumok forgatásával - szoftver termékek

Az objektumok (vagy a fényképezőgép) forgatásához komoly matematikai alapra van szükség, amelynek segítségével az összes objektum koordinátáit kiszámítják, amikor a számítógép "lapos" képernyőjére kerülnek. Csak azt akarom mondani, hogy nem szabad félni, minden matematikai könyvtárat már írt nekünk, csak azokat használjuk. Mindenesetre nem kell kihagynia a következő szöveget, függetlenül a matematika tudásszintjétől.

1. Mátrixok, általános fogalmak

Mik a mátrixok? Emlékeztetünk a magasabb matematikára: a mátrix ¬ a sorok és oszlopok ismert dimenzióival rendelkező számok halmaza.

Mátrixokat lehet hozzáadni, szorozni egy számmal, szorozni egymással és sok más érdekes dolgot, de ebben a pillanatban kihagyjuk, mert Részletesen le van írva bármely magasabb matematika tankönyvben (a tankönyveket a google.com oldalon lehet keresni). Fogjuk használni mátrixok programozók, akkor töltse ki, és azt mondják nekik, hogy minden a számítások előállítani a Direct3D matematikai könyvtár, így meg kell, hogy tartalmazza a projekt d3dx9.h fejléc modul (d3dx9.lib könyvtár).

Feladatunk egy olyan objektum létrehozása, azaz töltse ki a mátrixot az objektum csúcsainak koordinátáival. Minden csúcs egy vektor (X, Y, Z) háromdimenziós térben. Most, hogy valamilyen műveletet hozzunk létre, meg kell ragadnunk az objektumunkat (vagyis a mátrixot), és azt a transzformációs mátrix segítségével szorozzuk meg, ennek a műveletnek az eredménye egy új, mátrix formájában meghatározott objektum.

A Direct3D-ben három fő mátrix van definiálva és felhasználva: a világmátrix, a nézeti mátrix és a vetítési mátrix. Nézzük részletesebben.

World Matrix (World Matrix) - lehetővé teszi az objektum forgatását, átalakítását és méretezését, valamint az egyes objektumok helyi koordinátarendszerrel történő hozzárendelését.

A világmátrixmal való együttműködés funkciói:

  • D3DXMatrixRotationX (), D3DXMatrixRotationY (), D3DXMatrixRotationZ () - forgatóképességű pont képest egy tengelye van;
  • D3DXMatrixTranslation () - mozgassa a pontot egy másik pozícióba;
  • D3DXMatrixScale () - méretezés.

    Projection Matrix - a 3D-s jelenet vetítése a monitor képernyőjén. Segítségével a tárgy átalakul, az eredet átkerül az elülső részre, és meghatározza az elülső és a hátsó vágógörgőt.

    E mátrixok kitöltésével és az átalakítások elvégzésével háromdimenziós jelenetet hozhat létre, amelyben az igényeinek függvényében mozoghat, forgathat, zoomolhat, törölhet és végrehajthat más tárgyakat.

    2. Objektum létrehozása

    Adjon hozzá egy fejlécfájlt és egy könyvtárat a mátrixfunkciók használatához

    Szükségünk van standard funkciókra is az idővel való munkavégzéshez, ezért csatlakoztatjuk a megfelelő fejlécfájlt:

    Módosítsuk a csúcsformáció formátumát:

    Nem konvertált vertex típust fogunk használni, mert átalakításokat fogunk végezni mátrixokkal.
    Az InitDirectX () függvény kódját megváltoztatjuk. Ebben a funkcióban meg kell adnia két kijelzési mód beállítását.
    Kapcsolja ki a kivágási módot úgy, hogy forgatás közben láthassa az objektum összes oldalát:

    Jelenleg nem használjuk a világítást, hanem a festékeket egy bizonyos színnel festjük, ezért kapcsoljuk ki a világítást:

    Egyszerűsítsük szívünket három háromszög formájában. A helyi koordinátarendszert fogjuk használni.

    Programozás directx9 objektumok forgatásával - szoftver termékek

    3. Transzformációs mátrixok létrehozása

    Írjuk le a SetupMatrix () függvényt a render.h fájlban, amelyben a mátrixok összes művelete megtörténik.

  • D3DXMATRIX MatrixWorld; - világmátrix
  • D3DXMATRIX MatrixView; az űrlap mátrixa
  • D3DXMATRIX MatrixProjection; - vetületi mátrix
    A világmátrix beállítása

    Ahhoz, hogy az objektum elfordulhasson, meg kell szerezni a rendszeridőt és az egyes "azonnali" értékeket a helyi koordinátarendszer és a világkoordináta rendszer közötti szög megváltoztatásához. Az X tengely körül forgatjuk, ezért a D3DXMatrixRotationX funkciót használjuk. A világmátrix kiszámítása után az értékeket a SetTransform függvény segítségével kell megadnia:

    Megtekintési mátrix beállítása

    Állítsa a fényképezőgépet a megfelelő helyre, és helyezze az objektumra

  • D3DXMatrixLookAtLH (MatrixView, - a függvény végrehajtásának eredménye
  • D3DXVECTOR3 (0.0f, 0.0f, -8.0f), - a kamera helye
  • A D3DXVECTOR3 (0.0f, 0.0f, 0.0f) az a pont, amelyre nézünk
  • D3DXVECTOR3 (0.0f, 1.0f, 0.0f)); - a tárgy teteje

    Számítás után a kapott értékeket kell alkalmazni:

    A vetítési mátrix beállítása

    D3DXMatrixPerspectiveFovLH (- a vetítési mátrix számításának funkciója MatrixProjection, - számítás eredménye D3DX_PI / 4, - a látómező az irányt az Y-tengely (radiánban) 1.0f, - tömörítés koefitsient 1.0f, - Front 100.0f jelenet vágás); - háttér jelenet megszakítása

    A számítás után a kapott értékeket kell alkalmazni:

    A mátrix-számítási függvény hívását a RenderScene () jelenet renderelés funkcióba helyezzük.
    Fuss az összeállításon és figyelje a forgatást :)

    Letöltések