DirectX9 empty project Szécsi László. Visual Studio Első indításkor C++ választása.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
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.
GraphGame gg001-Triangle
C++ programozási nyelv Gyakorlat hét
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Szécsi László. June 2010 DirectX SDK Visual Studio 2010.
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.
GPGPU labor I. OpenGL, Cg.
Öröklődés 2..
© 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.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
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
Első C programunk Visual C Express-ben Horváth Ernő 1.
Java programozási nyelv 3. rész – Osztályok I.
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.
DirectX a grafika laboron kívül. Mire lesz szükség Itt vannak a szükséges include és lib: iles/DXMinimalPack.zip.
VFP Form programozás Form szerkesztő elemei vezérlő elemek
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Számítógépes grafika 3. gyakorlat.
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 
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
Objektum orientált programozás a gyakorlatban
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Motor II. Env map Spotlight Szécsi László. Letöltés /code/E/code/EggCoreSecondBase.zip Kibontani (vagy előző labor folyt.):
Terep Szécsi László. Mechanizmus NxHeightField-ek definiálása PhysicsModel-be NxHeightFieldShapeDesc-ek betöltése Mesh-ek gyártása az NxHeightField- ekből.
Motor I. Scene graph XML Rendering Szécsi László.
Environment mapping Szécsi László. Új osztály: Lab3EnvMap copy&paste: Lab2Trafo.h -> Lab3EnvMap.h copy&paste: Lab2Trafo.cpp -> Lab3EnvMap.cpp copy&paste:
Transzformációk, textúrák, árnyalás Szécsi László.
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)\
Kamera, 3D, transzformációk Szécsi László. Math.zip kibontása az Egg projectkönyvtárba – float2, foat3, float4 típusok, HLSL-ben megszokott műveletekkel.
Plakátok, részecskerendszerek Grafikus játékok fejlesztése Szécsi László g09-billboard.
Grafikus játékok fejlesztése Szécsi László g10-engine
Megjelenítő-motor, színtér- menedzsment Szécsi László.
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.
OO framework, Egg util library László Szécsi. Projektek nem osztoznak semmilyen kódon – DXUT mindegyikben – effect betöltés, mesh betöltés, GUI mindegyikbe.
Geometry instancing Szécsi László. copy-paste-rename gg009-Gui folder vcxproj, filters átnevezés solution/add existing project rename project working.
User interface Szécsi László. Egg projectben DXUTgui.cpp – CDXUTDialogResourceManager::CDXUTDialogReso urceManager() m_SpriteBufferBytes11 = 0; ezt kihagyták,
Textúrázás Szécsi László. giraffe.jpg letöltése SolutionDir/Media folderbe.
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.
ARM tanfolyam 2. előadás.
2. gyakorlat DirectX 2007/2008 tavasz Klár Gergely
ELTE-IK, Számítógépes grafika 2./haladó 2. gyakorlat Klár Gergely.
Számítógépes grafika gyakorlat DirectX segítség A következő dolgokra van szükség: CG Toolkit: 
Vizualizáció és képszintézis Sugárkövetés (Dart + GLSL) Szécsi László.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
Ficsor Lajos Objektumok inicializálása CPP4 / 1 Objektumok inicializálása Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
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.
Számítógépes grafika DirectX 6. gyakorlat. Emlékeztető Múlt órán megvilágítással foglalkoztunk  Per vertex  Per pixel.
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.
A C++ programozási nyelv
Vizualizáció és képszintézis
gg004-Mesh project copy-paste-rename gg002-App folder
Kamera, 3D, transzformációk Szécsi László
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Direct3D DirectCompute
OO framework, Egg util library László Szécsi
GraphGame gg001-Triangle
Environment mapping Szécsi László
Függvénysablonok használata
Előadás másolata:

DirectX9 empty project Szécsi László

Visual Studio Első indításkor C++ választása

Project létrehozása Microsoft DirectX SDK (August 2008) telepítése Start Menu \ Microsoft DirectX SDK (August 2008)\ Sample browser Empty project (C++) July 2004 telepítése (D: vagy saját home) NEM a DX10 empty project project name: GraphGame

Próba Build Run eredmény: include hiba megoldás: Project properties/ C/C++/General/ Additional include directories + >\include

Próba Build Run eredmény: linkelési hiba megoldás: Project properties/ Linker/General/ Additional library directories + >\lib\x86

Próba Build Run eredmény: üres kék képernyő

Nézzük a kódot! GraphGame.cpp-ben vannak: Callback függvények események kezelésére paraméterként kapják: IDirect3DDevice9 interface

Class View / right click / New Folder “Lab1” Class View / right click / Add Class C++/C++ class Class Name: EngineInterface  inline ebből fogjuk majd a laborokon az aktuális effektet megvalósító osztályt származtatni Hozzunk létre saját OO interfacet FILEEngineInterface.hOPnew classCLASSEngineInterface

Drag&Drop Class View drag & drop EngineInterface -> Lab1

class EngineInterface{ protected: LPDIRECT3DDEVICE9 device; … ez mindig kelleni fog Device referencia FILEEngineInterface.hOPnew memberCLASSEngineInterface

töröljük: EngineInterface(void); ~EngineInterface(void); Gyári konstruktor és destruktor nem kell FILEEngineInterface.hOPdel methodCLASSEngineInterface

public: EngineInterface(LPDIRECT3DDEVICE9 device) {this->device = device;} virtual HRESULT createManagedResources() {return S_OK;} virtual HRESULT createDefaultResources() {return S_OK;} Eseménykezelő metódusok FILEEngineInterface.hOPnew methodCLASSEngineInterface

virtual HRESULT releaseManagedResources() {return S_OK;} virtual HRESULT releaseDefaultResources() {return S_OK;} Eseménykezelő metódusok FILEEngineInterface.hOPnew methodCLASSEngineInterface

virtual void animate (double dt, double t){} virtual void processMessage ( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){} virtual void render(){} Eseménykezelő metódusok FILEEngineInterface.hOPnew methodCLASSEngineInterface

EngineInterface kész

Class view, Add Class, C++ class: Class name: Lab1HLSL Base class: EngineInterface Implementáló osztály létrehozása FILELab1HLSL.h ~.cppOPnew classCLASSLab1HLSL

GraphGame.cpp: #include "EngineInterface.h" #include "Lab1HLSL.h" EngineInterface* engine = NULL; amíg nem hoztuk létre legyen NULL Globális eseménykezelő objektum FILEGraphGame.cppOPnew variableCLASS::

OnD3D9CreateDevice: engine = new Lab1HLSL(pd3dDevice); return engine-> createManagedResources(); OnD3D9DestroyDevice: engine-> releaseManagedResources(); delete engine; Példány létrehozás és felszabadítás FILEGraphGame.cppOPedit codeCLASS::

OnD3D9ResetDevice: return engine-> createDefaultResources(); OnD3D9LostDevice: engine-> releaseDefaultResources(); Reset és Lost esemény FILEGraphGame.cppOPedit codeCLASS::

OnFrameMove: if(engine) engine->animate (fElapsedTime, fTime); OnFrameRender: if(engine) engine->render(); a többit töröljük MsgProc: if(engine) engine->processMessage (hWnd, uMsg, wParam, lParam); Többi esemény FILEGraphGame.cppOPedit codeCLASS::

Az alap kész van Most már implementálhatjuk amit akarunk a Lab1HLSL-ben

class Lab1HLSL : public EngineInterface { public: Lab1HLSL(void); ~Lab1HLSL(void); Lab1HLSL gyári konstruktor/destruktor nem kell FILELab1HLSL.hOPdel methodCLASSLab1HLSL

Lab1HLSL::Lab1HLSL(void) { } Lab1HLSL::~Lab1HLSL(void) { } Az implementációja sem FILELab1HLSL.cppOPdel implCLASSLab1HLSL

class Lab1HLSL : public EngineInterface { public: Lab1HLSL(LPDIRECT3DDEVICE9 device); Új Lab1HLSL konstruktor FILELab1HLSL.hOPnew methodCLASSLab1HLSL

Lab1HLSL::Lab1HLSL(LPDIRECT3DDEVICE9 device) :EngineInterface(device) { } és az implementációja FILELab1HLSL.cppOPmethod implCLASSLab1HLSL

class Lab1HLSL : public EngineInterface { public: HRESULT createDefaultResources(); HRESULT releaseDefaultResources(); void render(); Implementálandó metódusok FILELab1HLSL.hOPnew methodCLASSLab1HLSL

class Lab1HLSL : public EngineInterface { LPDIRECT3DVERTEXBUFFER9 vertexBuffer; Vertex buffer referencia FILELab1HLSL.hOPnew memberCLASSLab1HLSL

HRESULT Lab1HLSL::createDefaultResources(){ device->CreateVertexBuffer( 4 * sizeof(D3DXVECTOR3), D3DUSAGE_DYNAMIC|D3DUSAGE_WRITEONLY, D3DFVF_XYZ, D3DPOOL_DEFAULT, &vertexBuffer, NULL); //... Vertex buffer létrehozása FILELab1HLSL.cppOPmethod implCLASSLab1HLSL METHODcreateDefaultResources

//... D3DXVECTOR3* vertexData; vertexBuffer->Lock(0, 0, (void**)&vertexData, D3DLOCK_DISCARD); vertexData[0] = D3DXVECTOR3(-1.0f, 1.0f, 0.0f); vertexData[1] = D3DXVECTOR3(1.0f, 1.0f, 0.0f); vertexData[2] = D3DXVECTOR3(-1.0f, -1.0f, 0.0f); vertexData[3] = D3DXVECTOR3(1.0f, -1.0f, 0.0f); vertexBuffer->Unlock(); Vertex buffer feltöltése FILELab1HLSL.cppOPmethod implCLASSLab1HLSL METHODcreateDefaultResources

HRESULT Lab1HLSL:: releaseDefaultResources() { vertexBuffer->Release(); return S_OK; } Vertex buffer felszabadítása FILELab1HLSL.cppOPmethod implCLASSLab1HLSL METHODreleaseDefaultResources

void Lab1HLSL::render(){ HRESULT hr; device->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(0, 45, 50, 170), 1.0f, 0); //... Rajzolás: kép törlése FILELab1HLSL.cppOPmethod implCLASSLab1HLSL METHODrender

//... device->BeginScene(); device->SetStreamSource(0, vertexBuffer, 0, sizeof(D3DXVECTOR3)); device->SetFVF(D3DFVF_XYZ); device->DrawPrimitive (D3DPT_TRIANGLESTRIP, 0, 2); device->EndScene(); } Rajzolás: pipeline indítása FILELab1HLSL.cppOPmethod implCLASSLab1HLSL METHODrender

próba fekete téglalap, lefedi a viewportot (változtasuk meg a csúcskoordinátákat, hogy ne fedje le, próba, aztán vissza)

shaderek Effect (.fx) file HLSL függvények pass: render state és shaderek technique: pass lista + globális változók (uniform paraméterek minden shadernek)

effect interface ID3DXEffect interface magasabb szintű absztrakció a device felett a device „párja” lesz alapműveletekhez a devicehoz fordulunk pl. shader paraméterek beállítása az effecten keresztül

Solution exporer/Add new item/Utility/text file File name: Lab1HLSL.fx Új effect file FILELab1HLSL.fxOPnew fileCLASSN/A

float4 vsIdle( in float4 pos : POSITION ) : POSITION { return pos; } HLSL Vertex shader FILELab1HLSL.fxOPnew funcFUNCvsIdle

float4 psWhite() : COLOR0 { return float4(1, 1, 1, 1); } HLSL Pixel shader FILELab1HLSL.fxOPnew funcFUNCpsWhite

technique white{ pass ExamplePass{ ZEnable = TRUE; VertexShader = compile vs_2_0 vsIdle(); PixelShader = compile ps_2_0 psWhite(); } Technique definíció FILELab1HLSL.fxOPnew techniqueFUNC::

class Lab1HLSL : public EngineInterface { LPD3DXEFFECT effect; Effect referencia FILELab1HLSL.hOPnew memberCLASSLab1HLSL

HRESULT Lab1HLSL::createDefaultResources() { D3DXCreateEffectFromFile(device, L"Lab1HLSL.fx", NULL, NULL, 0, NULL, &effect, NULL); Effect létrehozása.fx file alapján hibaell. nélkül FILELab1HLSL.cppOPadd codeCLASSLab1HLSL METHODcreateDefaultResources

HRESULT Lab1HLSL:: releaseDefaultResources() { effect->Release(); Effect felszabadítás FILELab1HLSL.cppOPadd codeCLASSLab1HLSL METHODreleaseDefaultResources

device->BeginScene(); effect->SetTechnique("white"); UINT a; effect->Begin(&a, 0); effect->BeginPass(0); //... Rajzolás shaderekkel FILELab1HLSL.cppOPadd codeCLASSLab1HLSL METHODrender

device->SetStreamSource(0, vertexBuffer, 0, sizeof(D3DXVECTOR3)); device->SetFVF(D3DFVF_XYZ); device->DrawPrimitive (D3DPT_TRIANGLESTRIP, 0, 2); effect->EndPass(); effect->End(); device->EndScene(); Rajzolás shaderekkel FILELab1HLSL.cppOPadd codeCLASSLab1HLSL METHODrender

próba fehér téglalap

class Lab1HLSL : public LabInterface { LPD3DXMESH mesh; Mesh referencia FILELab1HLSL.hOPnew memberCLASSLab1HLSL

HRESULT Lab1HLSL::createDefaultResources() { D3DXLoadMeshFromX(L"helix.x", 0, device, NULL, NULL, NULL, NULL, &mesh); Mesh létrehozása.x file alapján FILELab1HLSL.cppOPadd codeCLASSLab1HLSL METHODcreateDefaultResources

HRESULT Lab1HLSL:: releaseDefaultResources() { mesh->Release(); Mesh felszabadítása FILELab1HLSL.cppOPadd codeCLASSLab1HLSL METHODreleaseDefaultResources

device->SetStreamSource(0, vertexBuffer, 0, sizeof(D3DXVECTOR3)); device->SetFVF(D3DFVF_XYZ); device->DrawPrimitive (D3DPT_TRIANGLESTRIP, 0, 2); mesh->DrawSubset(0); Mesh rajzolása (négyszög helyett) FILELab1HLSL.cppOPdel/add codeCLASSLab1HLSL METHODrender

float4 vsIdle( in float4 pos : POSITION ) : POSITION { return float4(pos.xzy * 0.1, 1); } Átméretezés FILELab1HLSL.fxOPedit codeFUNCvsIdle