Kamera, 3D, transzformációk Szécsi László

Slides:



Advertisements
Hasonló előadás
GraphGame gg001-Triangle
Advertisements

Lua script Szécsi László
2D grafikus rendszerek Szirmay-Kalos László. 2D grafikus editor: GUI, use-case, dinamikus modell L L L R LD LU MouseLDown első pont MouseLDown második...
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.
További vektor, mátrix algoritmusok
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)\
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.
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.
Vizualizáció és képszintézis Sugárkövetés (Dart + GLSL) Szécsi László.
Képek, képfeldolgozás Szirmay-Kalos László.
Bevezetés a C# nyelvbe Az alapok összefoglalása Farkas Csaba.
Forrás: Reiter István C_Sharp programozás lépésről lépésre (frissített tartalommal )
 C++ STL szerű template könyvtár   Vektor struktúrák  Támogatott algoritmusok  Rendezések  Leképzések.
Szécsi László 3D Grafikus Rendszerek 15. előadás
06. GYAKORLAT LCD kijelző.
Fájlkezelés.
Térfogati illumináció
Elemi adattípusok.
A Scala programozási nyelv
Szécsi László 3D Grafikus Rendszerek 4. labor
A KINOVEA mozgáselemző rendszer használata
Monte Carlo módszerek.
Vizualizáció és képszintézis
Adatbázisok SQL.
Szécsi László 3D Grafikus Rendszerek 14. előadás
Ez az én művem Készítsünk tájképet! Készítette: Puskás Rebeka
Rendszerező összefoglalás
GUI.
C# SZINTAKTIKÁJA Az egyes utasítások végén pontosvessző áll
Szécsi László 3D Grafikus Rendszerek 1. labor
PHP-SQL adatbáziskezelő parancsai
Visual Studio Code Metrics
Animációk.
gg004-Mesh project copy-paste-rename gg002-App folder
VB ADATTÍPUSOK.
Alapok Model betöltés Anyagjellemzők Fényforrások Shaderek
Unity.
Adatszerkezetek.
Természettudományi kiselőadás címe
Sw2 PhysX.
A könyvtár mint rendszer
OpenGL V.
C++ Standard Template Library
Elektronikai Áramkörök Tervezése és Megvalósítása
Direct3D DirectCompute
Informatikai gyakorlatok 11. évfolyam
OO framework, Egg util library László Szécsi
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
GraphGame gg001-Triangle
A Nation Library of Medicine és adatbázisai
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
A Lineáris Keresés Buktatói
Environment mapping Szécsi László
Mesh from file, OrthoCamera, PerspectiveCamera
További rendező és kereső algoritmusok
Szálszinkronizáció.
Pénzügyi project 2018 Projectvezetők: Sinka Zsuzsanna,Morvai Andrea
FÜGGVÉNYEK ÉS GRAFIKONJUK
Függvénysablonok használata
Előadás másolata:

Kamera, 3D, transzformációk Szécsi László GraphGame ggl005-Cam Kamera, 3D, transzformációk Szécsi László

Egg bővítése Math.zip kibontása az Egg projectkönyvtárba float2, foat3, float4 típusok, HLSL-ben megszokott műveletekkel float4x4 típus Cam.zip kibontása az Egg projectkönyvtárba Egg::Cam::Base – kamera interface Egg::Cam::FirstPerson – WASD + egér Math, Cam filterek létrehozása, forrásfileok hozzáadása az Egg projecthez

Min, max A windows.h-ben definiált makrók nem kellenek ezért van az stdafx.h-ban az #include <windows.h> (vagy wrl.h) előtt #define NOMINMAX és nem akad össze a Math::min, Math::max-xal

gg005-Cam project copy-paste-rename gg004-Mesh folder vcxproj, filters átnevezés solution/add existing project build, run

#6.0 Game.cpp ComPtr<ID3DBlob> vertexShaderByteCode = loadShaderCode("vsIdleTrafo.cso");

Shaders/vsTrafo.hlsl #5.0 cbuffer perObject{ float4x4 modelMatrix; float4x4 modelMatrixInverse; float4x4 modelViewProjMatrix; };

Shaders/vsTrafo.hlsl #5.1 struct IaosTrafo { float4 pos : POSITION; float3 normal : NORMAL; float2 tex : TEXCOORD; }; struct VsosTrafo float4 pos : SV_POSITION; float4 worldPos : WORLDPOS; float3 normal : NORMAL; float2 tex : TEXCOORD;

Shaders/vsTrafo.hlsl #5.2 VsosTrafo vsTrafo(IaosTrafo input) { VsosTrafo output = (VsosTrafo)0; output.pos = mul(input.pos, modelViewProjMatrix); output.worldPos = mul(input.pos, modelMatrix); output.normal = mul(modelMatrixInverse, float4(input.normal.xyz, 0.0)); output.tex = input.tex; return output; }

#6.0 Game.h Microsoft::WRL::ComPtr<ID3D11Buffer> perObjectConstantBuffer;

#6.0 Game.cpp using namespace Egg::Math; struct float3

Game.cpp #6.0 D3D11_BUFFER_DESC constantBufferDesc; constantBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; constantBufferDesc.ByteWidth = sizeof(Egg::Math::float4x4) * 3; constantBufferDesc.CPUAccessFlags = 0; constantBufferDesc.MiscFlags = 0; constantBufferDesc.StructureByteStride = 0; constantBufferDesc.Usage = D3D11_USAGE_DEFAULT; Egg::ThrowOnFail("Failed to create constant buffer.", __FILE__, __LINE__) ^ device->CreateBuffer(&constantBufferDesc, nullptr, perObjectConstantBuffer.GetAddressOf());

#6.0 Game.cpp material->setCb(Egg::Mesh::ShaderStageFlag::Vertex, 0, perObjectConstantBuffer);

Game.cpp - render #6.0 float4x4 perObjectMatrices[3]; perObjectMatrices[2] = float4x4::scaling( float3(0.5, 0.5, 1)); perObjectMatrices[1] = float4x4::identity; perObjectMatrices[0] = float4x4::identity; context->UpdateSubresource(perObjectConstantBuffer.Get(), 0, nullptr, perObjectMatrices, 0, 0);

main.cpp if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { app->processMessage(hwnd, msg.message, msg.wParam, msg.lParam); TranslateMessage(&msg); DispatchMessage(&msg); } else { auto currentTime = std::chrono::system_clock::now(); std::chrono::duration<double> timeStep = currentTime - time; std::chrono::duration<double> timeSinceStart = currentTime - startTime; app->animate(timeStep.count(), timeSinceStart.count()); app->render(context); Egg::ThrowOnFail("Failed to present swap chain.", __FILE__, __LINE__) ^ swapChain->Present(0, 0); }

Game osztályba #include "Cam/FirstPerson.h" Egg::Cam::FirstPerson::P firstPersonCam; firstPersonCam = Egg::Cam::FirstPerson::create(); void animate(double dt, double t); bool processMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

Game.cpp void Game::animate(double dt, double t) { if(!firstPersonCam) return; firstPersonCam->animate(dt); } bool Game::processMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) if(!firstPersonCam) return false; firstPersonCam->processMessage(hWnd, uMsg, wParam, lParam); return false;

#6.0 Game.cpp - render // perObjectMatrices beállítása kamera alapján

Itt tartunk, kamera mozgatható