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

GraphGame gg001-Triangle

Hasonló előadás


Az előadások a következő témára: "GraphGame gg001-Triangle"— Előadás másolata:

1 GraphGame gg001-Triangle
Visual Studio, háromszög rajzolása Szécsi László

2 Direct3D11 SDK June 2010 DirectX SDK Visual Studio 2010

3 Könyvtár-hierarchia GraphGame – solution folder
Projects – ide gyűjtjük a projecteket (csak forrás) gg001-Triangle – ez például egy project folder lesz gg002-Effect – ez is fx – ebben lesz majd a projecthez tartozó shader kód Build – ide dolgozik majd a Visual Studio Debug – ide ha debugba fordítunk gg001-Triangle – minden projectnek lesz alkönyvtára Release – ide ha releasebe gg001-Triangle – itt is Bin – ide kerülnek a futtathatók (ugyanaz a hierarchia)

4 Könyvtár-hierarchia II.
GraphGame – solution folder Media – ide kerülnek a projectek közös modell, textúra, stb filejai fx – ide kerülnek a közös effect fileok, shaderek

5 Solution gyártása Visual Studio/Project/New Project…
name: Dontcare solution name: GraphGame Solution explorerben: Dontcare jobbklikk/remove Törülhetjük az egész Dontcare foldert Van egy üres solutionünk

6 Folderek A GraphGame folderben hozzuk létre a következő foldereket
Projects (ez a fontos) Media (projectek közös modelljei, textúrái) fx (projectek közös shader kódja) Bin (bináris exe, lib) Build (ideiglenes fileok)

7 DX Empty project Start Menu/DirectX SDK (June 2010)/DirectX Sample Browser install EmptyProject11 a GraphGame/Projects folderbe project neve: gg001-Triangle nem kellenek az sln fileok, törölhetők nem kell a vs2008-as projectfile, törölhető

8 Project berakása a solutionbe
VS-ban solutionexplorer/jobb klikk/add existing project válasszuk ki az előbb felrakott projectfilet (2010-eset)

9 Könyvtárbeállítások solution explorer/jobbklikk a projecten/project properties/general output directory $(ProjectDir.Replace($(SolutionDir),$(SolutionDir)Bin\$(Configuration)\)) intermediate directory $(ProjectDir.Replace($(SolutionDir),$(SolutionDir)Build\$(Configuration)\)) project properties/debugging/working dir $(SolutionDir)

10 Fordítás A megfelelő könyvtárakba szemetel
Így könnyű pl. csak a forrást összezippelni

11 DirectX 9 támogatás kidobása
delete EmptyProject9.cpp minden D3D9-et tartalmazó sor törlése a gg001-Triangle.cpp-ből

12 Include és lib könyvtárak beállítása
project properties (ez csak erre a projectre lesz érvényes) Configuration properties/c/c++/general/additional include directories C:\Program Files\Microsoft DirectX SDK (June 2010)\Include Configuration properties/linker/general/additional library directories C:\Program Files\Microsoft DirectX SDK (June 2010)\Lib\x86

13 Include és lib könyvtárak beállítása
gép alapon (minden projectre érvényes lesz) view menu: property manager property manager ablakban pl. Debug | Win32 Microsoft.Cpp.Win32.User duplaklikk VC++ directories alá az előző diákon szereplő könyvtárak beállítása

14 Itt tartunk – üres ablak

15 g001-Triangle.cpp globális callback függvények
eszközesemények OnD3D11CreateDevice program indul OnD3D11ResizedSwapChain ablak létrejött OnD3D11ReleasingSwapChain ablak megszűnt OnD3D11DestroyDevice program vége vezérlési események OnD3D11FrameRender rajzolás OnFrameMove animáció MsgProc windows üzenet

16 Háromszög rajzolása erőforrás létrehozás/felszabadítás (vertex buffer), render target törlés, rajzolás

17 Ezekre lesz szükség vertex buffer = [x, y, z] [x, y, z] [x, y, z, 1]
IA VS IA RS PS OM [x, y, z, 1] [x, y, z, 1] input layout vertex shader primitive topology marad default pixel shader marad default

18 gg001-Triangle.cpp #2.5 // global variables
ID3D11Buffer* vertexBuffer; ID3D11InputLayout* inputLayout; ID3D11VertexShader* vertexShader; ID3D11PixelShader* pixelShader;

19 gg001-Triangle.cpp #2.6 ... OnD3D11CreateDevice ... {
D3D11_BUFFER_DESC desc; desc.BindFlags = D3D11_BIND_VERTEX_BUFFER; desc.ByteWidth = sizeof(D3DXVECTOR3) * 3; desc.CPUAccessFlags = 0; desc.MiscFlags = 0; desc.StructureByteStride = sizeof(D3DXVECTOR3); desc.Usage = D3D11_USAGE_IMMUTABLE; D3DXVECTOR3 vertexPositionArray[3] = { D3DXVECTOR3(0, 0, 0.5), D3DXVECTOR3(0, 1, 0.5), D3DXVECTOR3(1, 0, 0.5) }; D3D11_SUBRESOURCE_DATA initData; initData.pSysMem = vertexPositionArray; initData.SysMemPitch = 0; initData.SysMemSlicePitch = 0; pd3dDevice->CreateBuffer(&desc, &initData, &vertexBuffer);

20 #2.7 gg001-Triangle.cpp pd3dDevice->CreateBuffer(&desc, &initData, &vertexBuffer); const char* vertexShaderCode = "float4 vsIdle(float4 pos :POSITION ) :SV_Position {return pos;}"; ID3DBlob* vertexShaderByteCode; D3DX11CompileFromMemory(vertexShaderCode, strlen(vertexShaderCode), NULL, NULL, NULL, "vsIdle", "vs_5_0", 0, 0, NULL, &vertexShaderByteCode, NULL, NULL); pd3dDevice->CreateVertexShader( vertexShaderByteCode->GetBufferPointer(), vertexShaderByteCode->GetBufferSize(), NULL, &vertexShader);

21 gg001-Triangle.cpp #2.8 // insert after #2.7
D3D11_INPUT_ELEMENT_DESC positionElement; positionElement.AlignedByteOffset = 0; positionElement.Format = DXGI_FORMAT_R32G32B32_FLOAT; positionElement.InputSlot = 0; positionElement.InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; positionElement.InstanceDataStepRate = 0; positionElement.SemanticIndex = 0; positionElement.SemanticName = "POSITION";

22 gg001-Triangle.cpp #2.9 // insert after #2.8
pd3dDevice->CreateInputLayout( &positionElement, 1, vertexShaderByteCode ->GetBufferPointer(), vertexShaderByteCode ->GetBufferSize(), &inputLayout);

23 gg001-Triangle.cpp #2.10 // insert after #2.9
const char* pixelShaderCode = "float4 psIdle() : SV_Target {return float4(1, 0, 0, 1);}"; ID3DBlob* pixelShaderByteCode; D3DX11CompileFromMemory(pixelShaderCode, strlen(pixelShaderCode), NULL, NULL, NULL, "psIdle", "ps_5_0", 0, 0, NULL, &pixelShaderByteCode, NULL, NULL); pd3dDevice-> CreatePixelShader( pixelShaderByteCode->GetBufferPointer(), pixelShaderByteCode->GetBufferSize(), NULL, &pixelShader);

24 gg001-Triangle.cpp #2.11 ...OnD3D11DestroyDevice... {
vertexBuffer->Release(); inputLayout->Release(); vertexShader->Release(); pixelShader->Release(); }

25 gg001-Triangle.cpp #2.12 ...OnD3D11FrameRender... {
ID3D11DeviceContext* context = pd3dImmediateContext; float clearColor[4] = { 0.9f, 0.7f, 0.1f, 0.0f }; ID3D11RenderTargetView* defaultRtv = DXUTGetD3D11RenderTargetView(); ID3D11DepthStencilView* defaultDsv = DXUTGetD3D11DepthStencilView(); context->ClearRenderTargetView( defaultRtv, clearColor ); context->ClearDepthStencilView( defaultDsv, D3D11_CLEAR_DEPTH, 1.0, 0 );

26 gg001-Triangle.cpp #2.13 // insert after #2.12
unsigned int stride = sizeof(D3DXVECTOR3); unsigned int offset = 0; context->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset); context->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); context->IASetInputLayout(inputLayout); context->VSSetShader(vertexShader, NULL, 0); context->PSSetShader(pixelShader, NULL, 0); context->Draw(3, 0);

27 Háromszög kész

28 Honnan tudjuk mit kell csinálni?
Start menu doc

29 Visual Studio 2010 tippek bepastelt kódhoz: általában kódoláshoz
formáz: kijelöl, Ctrl+K, Ctrl+F általában kódoláshoz kódieg.: eleje begépel, aztán Ctrl+space metódus paraméterlistája kurzor a zárójelek közé v. nyitó zárójel után ctrl+alt+space


Letölteni ppt "GraphGame gg001-Triangle"

Hasonló előadás


Google Hirdetések