GraphGame gg001-Triangle

Slides:



Advertisements
Hasonló előadás
Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar Programok fordítása, szerkesztése és végrehajtása.
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.
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.
Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat Kovács Tamás & Mingesz Róbert 3. óra február 20., 23.
Borland C/C++ mintapéldák
Első C programunk Visual C Express-ben Horváth Ernő 1.
Számítógépes grafika OpenGL 1. gyakorlat.
Készítette: Keszthelyi Zsolt
DirectX a grafika laboron kívül. Mire lesz szükség Itt vannak a szükséges include és lib: iles/DXMinimalPack.zip.
Mikrovezérlők, perifériák laboratóriumi gyakorlat 3. óra szeptember 18. Mingesz Róbert v
V 1.0 ÓE-NIK, Programozás I. A Microsoft Visual Studio 2010 használata.
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 
Vizuális alkalmazások a FoxProban Páll Éva Boglárka.
Microsoft Visual FoxPro 9.0
Segédlet vizuális programozáshoz Kovács László
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.
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:
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)\
Rendering pipeline Ogre3D
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.
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.
Többmenetes renderelés Grafikus játékok fejlesztése Szécsi László g11-multipass.
Grafikus játékok fejlesztése Szécsi László t09-texture
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.
Visual Basic 2008 Express Edition
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.
2. Gyakorlat Zalatnai Csongor
A C++ nyelv.
Számítógépes grafika gyakorlat DirectX segítség A következő dolgokra van szükség: CG Toolkit: 
1 Verseny 2000 gyakorlat SQL 2000 Server Portál adatbázis létrehozása.
Vizualizáció és képszintézis Sugárkövetés (Dart + GLSL) Szécsi László.
Számítógépes grafika OpenGL 5. gyakorlat.
Rendezőalgoritmusok. Feladatok I. 1.Hozzunk létre új StandardEXE VB projektet. Töröljük Form1-t 2.Add/Module/New, majd Properties/átnevezzük: „MainModule”
1 Setup Project készítése Szabadi Tamás
Számítógépes grafika gyakorlat: DirectX 2007/2008 tavasz Klár Gergely
Képek, képfeldolgozás Szirmay-Kalos László.
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.
GPGPU – CUDA 1..
Alkalmazásfejlesztés gyakorlat
UML használata a fejlesztésben, illetve a Visual Studio 2010-ben
A grafikus hardware programozása
Alkalmazásfejlesztés gyakorlat
Vizualizáció és képszintézis
Szécsi László 3D Grafikus Rendszerek 14. előadás
gg004-Mesh project copy-paste-rename gg002-App folder
Kamera, 3D, transzformációk Szécsi László
Direct3D DirectCompute
OO framework, Egg util library László Szécsi
GraphGame gg001-Triangle
Environment mapping Szécsi László
B M Java Programozás 5. Gy: Java alapok IT A N Adatkezelő 1.rész
Előadás másolata:

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

Direct3D11 SDK June 2010 DirectX SDK Visual Studio 2010

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)

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

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

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)

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ő

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

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)

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

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

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

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

Itt tartunk – üres ablak

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

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

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

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

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

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

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";

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

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

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

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

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

Háromszög kész

Honnan tudjuk mit kell csinálni? Start menu doc

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