Számítógépes grafika gyakorlat: DirectX 2007/2008 tavasz Klár Gergely
Tartalom 3D alapok DirectX áttekintés A Direct3D objektum és a Direct3D device DXUT DXFrame
3D alapok Bemenet: geometriai, felületjellemző és kiegészítő adatok Kimenet: raszteres kép
Képalkotás menete
Vertex Data ◦Transzformálatlan csúcspont (vertex) adatok Primitive Data ◦A csúcsokból épített geometriai primitívek Tessellation ◦Magasabbrendű primitívek, displacement mapping, stb. Vertex Processing ◦Csúcspont transzformációk Geometry Processing ◦Vágás, hátlapeldobás, raszterizálás
Képalkotás menete Textured Surface ◦Textúra adatok Texture Sampler ◦Textúra adatok szűrése Pixel Processing ◦Árnyalás, textúrázás, stb. Pixel Rendering ◦Pixelek feldolgozása alfa érték, mélység- és stencilbuffer, alfa blending szerint
Geometriai adatok Csúcspontokból primitíveket építünk A GPU-ra küldető primitív típusok ◦Pont ◦Szakasz ◦Szakasz-szalag ◦Háromszög ◦Háromszög-szalag ◦Háromszög-legyező
Háromszögek Nem mindegy a háromszögek bejárása! Egy háromszöglap (face) szembe néz, ha a csúcsainak megadási sorrendje az óramutató járásával megegyezik Különben a hátlapja látszik p1 p2 p3 p1 p2 p3
Homogén koordináták A csúcspontok megadására homogén koordinátákat használunk [x,y,z,w] négyessel adhatók meg A projektív tér pontjait jelölik A projektív tér az Euklideszi tér bővítése Az Euklideszi tér végtelenbeli pontjait is tartalmazza (pl. párhuzamosok metszéspontját)
Homogén koordináták Átszámítás homogén és euklideszi koordináták között Ha w≠0 [x,y,z,w]=(x/w,y/w,x/w) Ha w=0 nincs megfelelő pont az euklideszi térben A [x,y,z,0] alakú pontokat ideális pontoknak, a többit közönséges pontoknak nevezzük
Transzformációk Az egyes geometriai transzformációk leírhatók 4x4-es mátrixokkal Alapvető transzformációk ◦Léptékezés ◦Eltolás ◦Forgatás ◦Vetítés
Mátrixok összefűzése Egymás után alkalmazott transzformációk kifejezhetők a mátrixaik szorzatával Pl. T1, T2, T3 transzformációk C = T1*T2*T3 C használható a három transzformáció helyett A szorzás sorrendje nem tetszőleges (ahogy a mátrix szorzás sem kommutatív)
Affin transzformációk A vetítés eltér az előző transzformációktól Eddig: közönséges pont -> közönséges pont, ideális pont -> ideális pont Ezek az affin transzformációk Az affin transzformációk az Euklideszi teret az Euklideszi térre képzik le
Vetítések A vetítések a 3D-s térben adott modellt a síkképként megjelenítéshez „készítik elő” A vetítés nem affin transzformáció (Valódi) projektív transzformációnak nevezzük Ideális pont is megjelenhet a képen: a párhuzamosok találkozhatnak Képletesen a vetítés a kamera, ami tényleges pozíciókból látványbeli pozíciókat csinál
Vetítések, példa
DirectX A DirectX egy alacsonyszintű API gyűjtemény Multimédiás alkalmazások futtatására, írására szolgál Részei ◦DirectX Audio ◦DirectX Graphics ◦DirectX Input
DirectX A fejlesztéshez DirectX SDK szükséges Ingyenesen letölthető: px?FamilyId=4B78A58A-E672-4B83-A28E- 72B5E93BD60A&displaylang=en Használható „hagyományos” C++, illetve a.Net 1.1-es nyelvek bármelyikével
Component Object Model A DirectX objektumai a COM platformon keresztül érhetők el A megvalósítás rejtett, csak felületet kapunk Sok kisebb interface-t érhetünk el egy nagy objektumok helyett Nem használhatók a hagyományos C++ - os létrehozási és megszüntetési módszere
COM – Gyakori elemek Minden COM metódus visszatérési érteke HRESULT típusú Ennek az értéke jelzi, hogy a művelet sikeresen befejeződött-e vagy sem A COM objektumokat interface-re mutató pointereken keresztül érhetjük el Az egyes I…* pointerekhez általában tartozik LP… és P… elnevezés is, a kettő mindenben meg egyezik Pl. typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9, *PDIRECT3DDEVICE9;
COM – Hasznos makrók SUCCEEDED(…), igaz ha a kapott HRESULT >= 0, azaz sikert jelez FAILED(…), a fenti ellentéte V(…), sikertelenség esetén feldob egy ablakot a hiba helyéről és részleteiről V_RETURN(…), mint a V, de kiugrik az aktuális függvényből SAFE_RELEASE(…), DX objektumok kényelmes felszabadítására, fontos: mindig 0 kezdőértékkel használjuk a pointereket, amiket ezzel szabadítunk fel
DirectX Graphics Ez tartalmazza a Direct3D-t, amivel a félév első felében foglalkozni fogunk
Direct3D object és device object Bármilyen programban a D3D használata egy IDirect3D9 objektum létrehozásával kezdődik Ezzel lekérhetők az elérhető eszközök, és létrehozható az IDirect3DDevice9 egy példánya Az IDirect3DDevice9 biztosítja a kapcsolatot a videokártya és a programunk között Ennek a metódusaival történik majd a tényleges képalkotás
Erőforrások A Direct3D a képalkotáshoz szükséges adatokat erőforrásoknak (resources) nevezi Ezeket memória kezelésük szerint a következő típusúak lehetnek ◦DEFAULT: az erőforrás típusától függően kerül a rendszer vagy a videokártya memóriájába ◦MANAGED: mindkét memóriában lesz példány, a rendszer automatikusan újratölti, ha a videokártya memóriájából elveszik ◦SYSTEMMEM: a rendszermemóriában lesz elhelyezve, a Direct3D device-ok általában nem tudnak hozzáférni az ilyen erőforrásokhoz
Események Device létrejötte és megszűnése: ilyenkor érdemes az előre ismert MANAGED erőforrásokat lefoglalni illetve elengedni Reset Device: a létrehozás utáni és az eszköz visszaszerzése utáni állapot, a DEFAULT erőforrásokat itt kell [újra] lefoglalni Lost Device: az eszköz elvesztése előtt következik be, tipikusan ALT+TAB, vagy minimalizálás hatására. A DEFAULT erőforrásokat itt kell felszabadítani Felhasználói események
DXUT Direct3D alkalmazások fejlesztését megkönnyítő könyvtár A DirectX SDK része, az SDK példaprogramjai ezt használják Leegyszerűsíti az ablak és eszköz létrehozást Eseménykezelő függvényeket ad a felsorolt és további eseményekhez, mit a rajzolás és új kép kezdete
DXFrame[work] „Házi” objektumorientált keretrendszer A DXUT-re épül Fogadja annak minden eseményét Saját alkalmazás ebből származtatva készíthető A félév során a DirectX-es programokat ezzel készítjük az órákon