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)\

Slides:



Advertisements
Hasonló előadás

Advertisements

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.
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
1. foreach( fejlesztő in Lurdyház ) { fejlesztő.Agy. Delete If( delegate ( Content c ) { return c.ContainsAny( „Win32 / User32.dll”, „GDI”,„GDI+”,„WindowsForms”,
3 5 6 Application Services Deployment Services Databinding USER INTERFACE SERVICES XAML Accessibility Property System Input & Eventing BASE SERVICES.
Richter Elek Technikai terméktámogatási felelős Microsoft Magyarország.
Térfogatvizualizáció Szirmay-Kalos László. Térfogati modellek v(x,y,z) hőmérséklet sűrűség légnyomás potenciál anyagfeszültség... v(x,y,z) tárolás: 3D.
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.
TRANZIENS ADATTÁROLÁS State objektum Egy alkalmazásszintű gyűjtemény (Dictionary), mely Tombstone esetén megőrzi tartalmát a memóriában kulcs/érték párokként.
Programozás II. 3. Gyakorlat C++ alapok.
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
DirectX a grafika laboron kívül. Mire lesz szükség Itt vannak a szükséges include és lib: iles/DXMinimalPack.zip.
PHP VI Adatbázisok, MySQL
PHP V Osztályok, Objektumok. Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name;
PHP II. Tömbök, sztringek
Multimédiás programok készítése Macromedia Director fejlesztői környezetben 4. előadás Készítette: Kosztyán Zsolt
Windows Server 2008 { PowerShell }
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 
Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - III. / 1 13.Állományok, bejegyzések 14.Folyamok 15.Közvetlen hozzáférésű állomány.
Hasznos ismeretek Hogyan bővítsük ismereteinket AVRDUDEflags -E noreset.
Könyvtár, csomag és alprogramokVHDL Könyvtár, csomag és alprogram n Library és use n Package n Alprogramok –Procedure –Function –Resolution function Egy.
Térfogatvizualizáció Szirmay-Kalos László. Térfogati modellek v(x,y,z) hőmérséklet sűrűség légnyomás potenciál anyagfeszültség... v(x,y,z) tárolás: 3D.
Motor IIII. Vezérlés Szécsi László. Letöltés diák: //l09-engine4.ppt.
Motor IIII. PhysX utáni rendberakás Vezérlés Szécsi László.
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.
PhysX autó Szécsi László. Letöltés diák: bagira.iit.bme.hu/~szecsi/GraphGame //l12-car.ppt modell: bagira.iit.bme.hu/~szecsi/GraphGame //pickup.zip.
DirectX9 empty project Szécsi László. Visual Studio Első indításkor C++ választása.
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:
Vízfelület Szécsi László. Nyílt víz a nyílt óceánon a felületi cseppecskék körmozgást végeznek trochoid hullámforma hullámhossz hullámmagasság amplitúdó.
PhysX integráció Szécsi László. Letöltés diák: bagira.iit.bme.hu/~szecsi/GraphGame //l11-physx.ppt modell: bagira.iit.bme.hu/~szecsi/GraphGame //pickup.zip.
Transzformációk, textúrák, árnyalás Szécsi László.
Motor V. Ütközés detektálás és válasz Szécsi László.
V. labor Thread, animáció. Animáció A figurák a lépés kijelölése után nem rögtön az új helyen teremnek, hanem egyenes vonal mentén mozognak a cél felé.
OIS. Kezdeti teendők Letöltés: OgreLabControllersBase.zip Kicsomagol, betölt:.sln Additional include és library path beállítása Working directory beállítása.
SzgLab 3. Java. I. labor Alapok, OOP váz, megjelenítés konzolon.
II. labor Lépések kezelése. Új metódus a Square osztályba public static int letterToFileIndex(char letter) throws NumberFormatException { int i = 0; for.
IIII. labor Képfileok kezelése (media resources) Canvas Egérkezelés.
III. labor AWT, eseménykezelés Applet. Új class: ButtonView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ButtonView.
Textúrák Grafikus játékok fejlesztése Szécsi László g07-texture.
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
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.
 Kvantált kép fényesség értékei: G [ 0, Gmax ]  G fényességű pontok száma: P(G)
GPGPU labor XII. Tomográfiás rekonstrukció. Kezdeti teendők Tantárgy honlapja, Monte Carlo szimuláció A labor kiindulási alapjának letöltése (lab12_base.zip),
GPGPU labor II. GPU mint vektor processzor. Kezdeti teendők Tantárgy honlapja, Bevezetés – Alap könyvtárak letöltése Tantárgy honlapja, GPU mint vektor.
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.
HTTP kommunikáció Androidon HttpClient-en keresztűl HttpPost/HttpGet objektum használatával HttpClient execute metódusának meghívása.
 OpenCL platform  Számító eszközök  OpenCL kontextusok  Parancs sorok  Szinkronizáció  Memória objektumok  OpenCL programok  OpenCL függvények.
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 OpenGL 5. gyakorlat.
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.
Vizualizáció és képszintézis
gg004-Mesh project copy-paste-rename gg002-App folder
Kamera, 3D, transzformációk Szécsi László
OO framework, Egg util library László Szécsi
Environment mapping Szécsi László
TECHNICAL TRAINING December 2012.
Előadás másolata:

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)\ Sample browser Empty project (C++) July 2004 telepítése (D: vagy saját home) project name: GraphGame

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

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

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

Nézzük a kódot! Callback függvények események kezelésére IDirect3DDevice9 interface

Hozzunk létre saját OO interfacet Class View / right click / New Folder “Lab1” Class View / right click / Add Class “EngineInterface” ebből fogjuk majd a laborokon az aktuális effektet megvalósító osztályt származtatni

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

új tagváltozó: device class EngineInterface{ protected: LPDIRECT3DDEVICE9 device; … ez mindig kelleni fog

Gyári konstruktor és destruktor nem kell töröljük őket

új metódusok EngineInterface(LPDIRECT3DDEVICE9 device) {this->device = device;} virtual HRESULT createManagedResources() {return S_OK;} virtual HRESULT createDefaultResources() {return S_OK;}

új metódusok virtual HRESULT releaseManagedResources() {return S_OK;} virtual HRESULT releaseDefaultResources() {return S_OK;}

új metódusok virtual void animate (double dt, double t){} virtual void processMessage ( UINT uMsg, WPARAM wParam, LPARAM lParam){} virtual void render(){}

LabInterface kész

Lab1HLSL : LabInterface Class view, Add Class: “Lab1HLSL” Base class: “EngineInterface”

Globális példány GraphGame.cpp: #include “EngineInterface.h" #include "Lab1HLSL.h" EngineInterface* engine = NULL; amíg nem hoztuk létre legyen NULL

Példány létrehozás/törlés OnCreateDevice: engine = new Lab1HLSL(pd3dDevice); return engine-> createManagedResources(); OnDestroyDevice: engine-> releaseManagedResources(); delete engine;

Reset/Lost esemény OnResetDevice: return engine-> createDefaultResources(); OnLostDevice: engine-> releaseDefaultResources();

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

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

új metódusok Lab1HLSL: HRESULT createDefaultResources(); HRESULT releaseDefaultResources(); void render();

Vertex buffer változó class Lab1HLSL : public EngineInterface { LPDIRECT3DVERTEXBUFFER9 vertexBuffer;

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

Vertex buffer feltöltése... 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[2] = D3DXVECTOR3(1.0f, -1.0f, 0.0f); vertexBuffer->Unlock();

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

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

rajzolás: render... device->BeginScene(); device->SetStreamSource(0, vertexBuffer, 0, sizeof(D3DXVECTOR3)); device->SetFVF(D3DFVF_XYZ); device->DrawPrimitive (D3DPT_TRIANGLESTRIP, 0, 2); device->EndScene(); }

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

Lab1HLSL.fx // vertex shader: float4 idleVS( in float4 pos : POSITION ) : POSITION { return pos; }

Lab1HLSL.fx // pixel shader: float4 whitePS() : COLOR0 { return float4(1, 1, 1, 1); }

technique technique white{ pass ExamplePass{ ZEnable = TRUE; VertexShader = compile vs_2_0 idleVS(); PixelShader = compile ps_2_0 whitePS(); }

effect példány class Lab1HLSL : public LabInterface { LPD3DXEFFECT effect;

effect létrehozás HRESULT Lab1HLSL::createDefaultResources() { D3DXCreateEffectFromFile(device, L”Lab1HLSL.fx”, NULL, NULL, 0, NULL, &effect, NULL);

effect felszabadítás HRESULT Lab1HLSL:: releaseDefaultResources() { effect->Release();

rajzolás effecttel device->BeginScene(); effect->SetTechnique("white"); UINT a; effect->Begin(&a, 0); effect->BeginPass(0); // ide jön a draw call

rajzolás effecttel effect->EndPass(); effect->End(); device->EndScene();

próba fehér téglalap

mesh object class Lab1HLSL : public LabInterface { LPD3DXMESH mesh;

létrehozás HRESULT Lab1HLSL::createDefaultResources() { D3DXLoadMeshFromX(L"helix.x", 0, device, NULL, NULL, NULL, NULL, &mesh);

felszabadítás HRESULT Lab1HLSL:: releaseDefaultResources() { mesh->Release();

rajzolás // ide jön a draw call mesh->DrawSubset(0);

mesh vertex shaderben: return float4(pos.xzy * 0.1, 1);