SZÁMÍTÓGÉPES GRAFIKA 1. gyakorlat
Elérhetőségek Honlap: lunyi.web.elte.hu Egyéb lehetőségek: – Megkeresés után megegyezés szerint – A szorgalmi időszakban az ETR-es órarend szerint
Előfeltételek Programozási nyelvek (C++) Lineáris algebra A gyakorlat teljesítése nem előfeltéte a gyakorlat teljesítésének. Minorosok elvégezhetik ehelyett a Webgrafika 2-t. Keressétek Klár Gergelyt!
Számonkérés Félév végén géptermi zárthelyi Időpontja: a vizsgaidőszak első hetének második fele A ZH 4 órás, az oktatók segédanyagai használhatóak Csak egy API-ban kell megvalósítani a feladatot
Alternatív számonkérés A zárthelyi kiváltható a szorgalmi időszakban elkészített beadandó feladatokkal. Feladatok kitűzése: később, tavaszi szünet környékén Mind DirectX-ben, mind OpenGL- ben meg kell oldani.
Egyéb követelmények Órákon való megjelenés kötelező → min 4 hiányzás = gyakjegy megtagadás Minden második órán +/- (összesen 6) Aki negatívban áll, nem írhat beadandót. +/- eredmény beleszámol az első ZH pontjaiba
Szükséges programok, kiegészítők Visual Studio 2005 (2008 ajánlott) - Letölthető: DirectX SDK augusztusi2007 augusztusi júniusi (ajánlott)2010 júniusi
Olvasnivaló Nyisztor Károly: Grafika és játékprogramozás DirectX-szel
Olvasnivaló Nyisztor Károly: Shaderprogramozás - Grafika és játékfejlesztés DirectX-szel
Olvasnivaló Dr. Szirmay-Kalos László könyvei: - Háromdimenziós grafika, animáció és játékfejlesztés -Számítógépes grafika Kondorosi Károly: -Objektum orientált szoftverfejlesztésObjektum orientált szoftverfejlesztés
Olvasnivaló Bjarne Stroustrup: -A C++ programozási nyelvA C++ programozási nyelv Brian W. Kernighan – Dennis M. Ritchie: -A C programozási nyelvA C programozási nyelv
A mai óra anyaga A DirectX rövid ismertetése A COM-modell Egyszerű winAPI-k készítése Ismerkedés a Visual Studio-val
A DirectX-ről A DirectX egy API gyűjtemény, ami lehetővé teszi a hardverek hatékony elérését. Multimédiás fejlesztéseket segít – grafikus, audio, különböző bemeneti eszközök hatékony programozásához.
Egy kis történelem DOS-os időkben a hardver közvetlenül elérhető ↔ nehéz programozhatóság, ráadásul mindegyik hardverre külön le kellett tesztelni. Windows 3.1-ben megszűnt a közvetlen hozzáférés, de a pl. WinG nem biztosít jó használhatóságot.
Egy kis történelem Win 95-höz már megjelent a Windows Games SDK és ennek részeként a DirectX 1.0 (még 3D API nélkül) '90-es évek elején sok 3D-s motor készült pl. RenderMorphics Reality Lab-je → Microsoft '95-ben felvásárolja a céget
Egy kis történelem 1996: A DirectX 2.0-ba beépítik a Reality Lab-et Még elég instabil rendszer, nem megfelelő driver támogatás Már jelen volt az OpenGL támogatás is, de komoly problémái voltak.
Kezdeti DX vs. GL Az OpenGL lehetőségeihez nem voltak elég erősek az akkori PC-k A DirectX tervezési szempontjai között volt, hogy minél több gépen gyorsan futó programot lehessen vele írni. Ez kezdetben nehézkesebb programozást eredményezett.
A DirectX verziói 1.0 és 2.0: rengeteg hiba, instabilitás 3.0a: Nőtt a driver támogatottság, de a programozók nehezen követték az API hirtelen változásait. 4.0: Ez a verzió kimaradt :) 5.0: Lényegesen fejlesztőközelibb. Mélyebben épül bele az oprendszerbe.
A DirectX verziói 6.1a: Win98SE, további fejlesztések és javítások, RM és IM 7.0: szorosabb együttműködés a szoftver- és hardver fejlesztőkkel. 8.0: sok fejlesztés, változtatás
A DirectX 8.0 változtatásai A külön kezelt 2D (DirectDraw) és 3D (Direct3D) részeket összevonták → DirectGraphics Point-sprite-ok 3D-s textúrák Továbbfejlesztett D3DX könyvtár Vertex- és pixel- (vagy Fragment) shaderek
A 11-es SDK részei Az DirectX SDK-k támogatják az aktuális DirectX verziót és az azt megelőző 2-t. Tehát a 11-es támogatja a 9-et, 10-et és 11-et. 9.0: a 8.1 továbbfejlesztése, újabb shader verziók, HLSL támogatás, használható framework A 9.0-t fogjuk használni a félév során
A 11-es SDK részei 10.0, 10.1: a Vista driver modelljéhez igazították Geometry shader is megjelenik már benne, ez közvetlenül írhat a memóriába. Shader modell 4.0 illetve : új shaderek, általános számítások shader támogatása
Shader modell 5 Párhuzamosítás támogatása Általános számítások felé elmozdulás Csak Windows Vista és Windows 7 alatt működik
A DirectX jelenlegi komponensei Direct Graphics: 2D és 3D-s grafikus megjelenítés Direct Input: bemeneti eszközök kezelése Direct Audio: audio fejlesztéshez, hang lejátszáshoz és felvételhez
COM modell Component Object Model A DirectX a COM-ra épül COM: felületek, amelyeken komponensek kommunikálnak A felület függvények halmaza
COM objektumok Kommunikáció hasonló, mint C++-os objektumokkal DE: - Szigorúbb egységbe zárás - Máshogy hozzuk létre őket - A szükséges DLL-ek automatikusan töltődnek be - A COM bináris formátum, nyelvfüggetlen
Objektumok és interfészek Egy objektum akárhány interfészt megvalósíthat, de az IUnknown-t kötelező. Egy interfészt több objektum is megvalósíthat. Az objektum az interfészének összes szolgáltatását köteles megvalósítani. (Kivétel E_NOTIMPL) Interfészt nem lehet módosítani
Interfész generációk Gyakran egy-egy interfész több generáción át fejlődik Különböző generációk interfészei hasonló feladatot látnak el, de a megvalósításban különböznek Általában egy objektum az összes generáció interfészét megvalósítja
Globally Unique Identifier GUID – 128 bites szám, a COM-ban egyedi azonosításra használják. Objektumoknál CLSID-nek, interfészeknek IID- nek hívják őket. 32 hexadecimális számmal szokták stringként ábrázolni. {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
HRESULT Majdnem minden COM eljárás visszatérési értéke HRESULT típusú, ami egy 32 bites integer. Jelezhető vele, hogy sikeres volt-e az eljárás (S_OK) vagy sem (E_FAIL) Tesztelhető is a sikeres (SUCCEEDED(hr)) és a sikertelen (FAILED(hr)) visszatérés
Pointerek címe COM objektumokat csak pointeren keresztül tudjuk elérni. IDirect3DDevice9 *pDeviceInterface A legtöbb eljárásnak ezeknek a pointereknek a címére van szüksége
Magyar jelölés Változónevek első néhány karaktere a változó típusára utal. Például: p a pointer i az integer b a bool... A Microsoft mindenütt alkalmazza (Simonyi Károly után kapta a nevét)
COM objektumok létrehozása Közvetlenül: a CoCreateInstance függvénynek átadva az objektum CLSID-jét. Közvetetten: pl egy DC eljárás vagy fv meghívásával, ami létrehozza az objektumot Ez utóbbit fogjuk használni, pl: IDirect3DDevice9::CreateDevice
COM objektumok megszüntetése A COM-ban nem lehet úgy megszüntetni sem egy objektumot, mint C++-ban Minden objektumhoz hivatkozásszámláló → 1- gyel nő, ha igénylik az interfészt, ha nincs már rá szükség, 1-gyel csökken. Ha 0 a számláló értéke, megsemmisül a COM objektum. IUnknown eljárásaival (AddRef(), Release())
COM objektumok megszüntetése A COM-ban nem lehet úgy megszüntetni sem egy objektumot, mint C++-ban Minden objektumhoz hivatkozásszámláló → 1- gyel nő, ha igénylik az interfészt, ha nincs már rá szükség, 1-gyel csökken. Ha 0 a számláló értéke, megsemmisül a COM objektum. IUnknown eljárásaival (AddRef(), Release())
Windowsos program váza Inicializálás - erőforrások lefoglalása, egyéb inicializálás Futás (sokszor :)) - Reagálás a beérkező üzenetkere, egyéb működés Kilépés - Erőforrások felszabadítása
Vége Köszönöm a figyelmet! :)