Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "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)\"— Előadás másolata:

1 DirectX9 empty project Szécsi László

2 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

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

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

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

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

7 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

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

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

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

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

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

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

14 LabInterface kész

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

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

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

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

19 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);

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

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

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

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

24 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();

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

26 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);...

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

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

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

30 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

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

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

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

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

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

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

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

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

39 próba fehér téglalap

40 mesh object class Lab1HLSL : public LabInterface { LPD3DXMESH mesh;

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

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

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

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


Letölteni ppt "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)\"

Hasonló előadás


Google Hirdetések