2008/2009 tavasz Klár Gergely  A DirectX egy alacsonyszintű API gyűjtemény  Multimédiás alkalmazások futtatására, írására szolgál 

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Osztály leszármaztatás
Számítógépes grafika DirectX 2. gyakorlat. Emlékeztető  Előző órán szó volt a COM modellről, amiben az objektumok eljárásait az általuk megvalósított.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
2010/2011 ősz Klár Gergely  A DirectX egy alacsonyszintű API gyűjtemény  Multimédiás alkalmazások futtatására, írására szolgál  Részei.
C++ programozási nyelv Gyakorlat hét
Programozás III KOLLEKCIÓK 2..
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Objective- C Bereczki Gréta Tamara
Mesh betöltés, kirajzolás Szécsi László. dx11-ben nincs – játékfejlesztők írnak maguknak úgyis DXUT-ban van – CDXUTSDKMesh – csak sdkmesh formátumot tud.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Dinamikus tömbök.
6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1.
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
Mutatók, tömbök, függvények
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
A C++ programozási nyelvSoós Sándor 1/10 C++ programozási nyelv Gyakorlat - 5. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
C# tagfüggvények.
C# tagfüggvények.
Számítógépes grafika OpenGL 1. gyakorlat.
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Delphi programozás 8. ELŐADÁS ADO ActiveX Data Objects.
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Számítógépes grafika 3. gyakorlat.
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
2008/2009 tavasz Klár Gergely  Gyakorlatok időpontjai: ◦ Szerda 10:05–11:35 ◦ Csütörtök 10:00+ε –11:30+ε  Gyakvez: ◦ Klár Gergely ◦
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
DirectX9 empty project Szécsi László. Visual Studio Első indításkor C++ választása.
Environment mapping Szécsi László. Új osztály: Lab3EnvMap copy&paste: Lab2Trafo.h -> Lab3EnvMap.h copy&paste: Lab2Trafo.cpp -> Lab3EnvMap.cpp copy&paste:
DirectX9 empty project Szécsi László. Project létrehozása Microsoft DirectX SDK (August 2008) telepítése Start Menu \ Microsoft DirectX SDK (August 2008)\
Effect framework, HLSL shader László Szécsi. forráskódban elérhető egyszerűsíti a shaderek fordítását, rajzolási állapot beállítását – pass: egy ilyen.
Visual Basic 2008 Express Edition
Pipeline Vertex shader Fragment shader. Transzformációs modul A modellünket a saját koordinátarendszerében adjuk meg Azonban a saját koordinátarendszerükben.
Számítógépes grafika DirectX 2. gyakorlat. Emlékeztető Előző órán áttekintettük a szükséges WinAPI- s alapokat Illetve röviden beletekintettünk a félév.
Java programozási nyelv Metódusok
Objektum orientált programozás 3. Függvények Nagy Szilvia.
Objektum orientált programozás
2. gyakorlat DirectX 2007/2008 tavasz Klár Gergely
Objektumvezérelt rendszerek tervezése
Számítógépes grafika gyakorlat DirectX segítség A következő dolgokra van szükség: CG Toolkit: 
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
CUDA C/C++ programozás CUDA C bevezetés A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
Számítógépes grafika gyakorlat: DirectX 2007/2008 tavasz Klár Gergely
Ficsor Lajos Objektumok inicializálása CPP4 / 1 Objektumok inicializálása Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Struktúrák a C nyelvben 1 Akkor használjuk, ha az egy egyedre jellemző különböző típusú adatokat együtt akarjuk tárolni. Lényegében típusdeklaráció. A.
Számítógépes grafika DirectX 7. gyakorlat. Emlékeztető Múlt órán mesheket és transzformációkat használtunk Most primitívkirajzoláshoz nézünk meg egy hasznos.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Programozás C# -ban Elágazások.
Neumann János Informatikai Kar
A CLIPS keretrendszer
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
A struct, az union és az enum típus
Konverziós operátorok
Függvénysablonok használata
Előadás másolata:

2008/2009 tavasz Klár Gergely

 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

 A fejlesztéshez DirectX SDK szükséges  Ingyenesen letölthető: amilyId=5493F76A-6D37-478D-BA17- 28B1CCA4865A&displaylang=en  Használható „hagyományos” C++, illetve a.Net 1.1-es nyelvek bármelyikével

 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ódszerek

 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 teljesen megegyezik  Pl. typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9, *PDIRECT3DDEVICE9;

 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

 Ez tartalmazza a Direct3D-t, amivel a félév első felében foglalkozni fogunk

 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

 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

 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

 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, mint például a rajzolás és új kép kezdete

 „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

1. onCreateDevice 2. onResetDevice 3. DXUT main loop ◦ Futásközben 1.onFrameMove 2.onFrameRender ◦ Átméretezés, minimalizálás, ALT+TAB hatására 1.onLostDevice 2.onResetDevice ◦ Bármikor  msgProc  keyboardProc  mouseProc 4. onLostDevice 5. onDestroyDevice

 onCreateDevice ◦ D3DPOOL_MANAGED erőforrások létrehozása  onDestroyDevice ◦ onCreateDevice-ban létrehozott erőforrások felszabadítása  onResetDevice ◦ D3DPOOL_DEFAULT erőforrások létrehozása  onLostDevice ◦ onCreateDevice -ban létrehozott erőforrások felszabadítása

 onFrameMove ◦ Logikai feladatok (számítás, file-kezelés, kommunikáció, stb.)  onFrameRender ◦ Rajzolás

 keyboardProc ◦ Billentyűzet kezelés  mouseProc ◦ Egér kezelés  msgProc ◦ Bármilyen Windows-os üzenet kezelése

1. Saját osztály leszármaztatása 2. Használt metódusok felüldefiniálása 3. Header include-olása az EmptyProject.cpp -be #include ”Sample1.hpp” 4. Objektum létrehozása WinMain -ben myFrameWork = new Sample1();

 DXFrame(const WCHAR *windowTitle, int width, int height, bool windowed)  Minden paraméternek van default értéke  Leszármazott konstruktora megadhat más értékeket is

1. Szerkezet ◦ Új osztály származtatása a DXFrame-ből ◦ Használt metódusok felüldefiniálása ◦ Csúcspont formátum (FVF) meghatározása 2. Inicializálás ◦ Csúcspont adatok megadása ◦ VertexBuffer létrehozása ◦ VertexBuffer feltöltése 3. Rajzolás ◦ Képernyőtörlés ◦ Formátum megadása ◦ VertexBuffer kiválasztása ◦ Rajzolás 4. Takarítás

 HRESULT onCreateDevice();  void onDestroyDevice();  Ezt a kettőt mindig együtt használjuk!  void onFrameMove( double fTime, float fElapsedTime );  void onFrameRender( double fTime, float fElapsedTime );

 Milyen adatokat akarunk tárolni a csúcspontok mellet? ◦ Pozíciót mindenképpen: D3DFVF_XYZ ◦ Szín adatokat: D3DFVF_DIFFUSE, D3DFVF_SPECULAR ◦ Normál vektort: D3DFVF_NORMAL ◦ Textúra koordinátákat: D3DFVF_TEX1,...

 FVF leíró: enum {FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE};  FVF struktúra struct VERTEXFORMAT { D3DXVECTOR3 v; D3DCOLOR col; };

VERTEXFORMAT vs[3]; vs[0].v = D3DXVECTOR3(0,0.5f,0); vs[1].v = D3DXVECTOR3( 0.5f,-0.5f,0); vs[2].v = D3DXVECTOR3(-0.5f,-0.5f,0); vs[0].col = vs[1].col = vs[2].col = D3DXCOLOR(0.5f, 0.6f, 0.0f, 1);

 Új osztály-adattag: LPDIRECT3DVERTEXBUFFER9 _vbuffer;  onCreateDevice() -ba: HRESULT hr; V( _device->CreateVertexBuffer( sizeof(VERTEXFORMAT) * 3, 0, FVF, D3DPOOL_MANAGED, &_vbuffer, 0));

void * vdata; V( _vbuffer->Lock(0, sizeof(VERTEXFORMAT) * 3, &vdata, 0) ); CopyMemory(vdata, vs, sizeof(VERTEXFORMAT) * 3); _vbuffer->Unlock();

_device-> SetRenderState(D3DRS_LIGHTING, FALSE); A világítás számítást ki kell kapcsolni, különben fekete lesz a háromszögünk!

_device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(65, 105, 225), 1, 0); if ( SUCCEEDED(_device->BeginScene()) ) { _device->SetStreamSource(0, _vbuffer, 0, sizeof(VERTEXFORMAT)); _device->SetFVF(FVF); _device-> DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); _device->EndScene(); }

 SAFE_RELEASE(_vbuffer);  Konstruktorban _vbuffer –t nullázzuk!