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

Visual Studio, háromszög rajzolása Szécsi László.

Hasonló előadás


Az előadások a következő témára: "Visual Studio, háromszög rajzolása Szécsi László."— Előadás másolata:

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

2 • June 2010 DirectX SDK • Visual Studio 2010

3 • 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 • 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 • 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 • 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 • 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 • VS-ban • solutionexplorer/jobb klikk/add existing project • válasszuk ki az előbb felrakott projectfilet (2010-eset)

9 • 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 • A megfelelő könyvtárakba szemetel • Így könnyű pl. csak a forrást összezippelni

11 • delete EmptyProject9.cpp • minden D3D9-et tartalmazó sor törlése a gg001-Triangle.cpp-ből

12 • 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 • 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

15 • eszközesemények – OnD3D11CreateDeviceprogram indul – OnD3D11ResizedSwapChainablak létrejött – OnD3D11ReleasingSwapChainablak megszűnt – OnD3D11DestroyDeviceprogram vége • vezérlési események – OnD3D11FrameRenderrajzolás – OnFrameMoveanimáció – MsgProcwindows üzenet

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

17 IAVSPSOMRSIA vertex buffer input layout vertex shader pixel shader primitive topology marad default marad default = [x, y, z] [x, y, z] [x, y, z, 1]

18 // global variables ID3D11Buffer* vertexBuffer; ID3D11InputLayout* inputLayout; ID3D11VertexShader* vertexShader; ID3D11PixelShader* pixelShader; #2.5

19 ... 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); #2.6

20 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); #2.7

21 // 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"; #2.8

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

23 // 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); #2.10

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

25 ...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 ); #2.12

26 // 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); #2.13

27

28 • Start menu • doc

29 • bepastelt kódhoz: – 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 "Visual Studio, háromszög rajzolása Szécsi László."

Hasonló előadás


Google Hirdetések