Transzformációk, textúrák, árnyalás Szécsi László.

Slides:



Advertisements
Hasonló előadás
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.
Advertisements

GraphGame gg001-Triangle
GPU Szirmay-Kalos László.
Térfogatvizualizáció Szirmay-Kalos László. Térfogati modellek v(x,y,z) hőmérséklet sűrűség légnyomás potenciál anyagfeszültség... v(x,y,z) tárolás: 3D.
FelültöltésVHDL Felültöltés (Overloading) n Áttekintés n Példák.
Szécsi László. June 2010 DirectX SDK Visual Studio 2010.
Grafikus játékok fejlesztése Szécsi László g11-physics
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.
 Gauss szűrő uniform sampler2D colorMap; const float kernel[9] = float[9]( 1.0, 2.0, 1.0, 2.0, 4.0, 2.0, 1.0, 2.0, 1.0); out vec4 outColor; void main(){
GPGPU labor I. OpenGL, Cg.
 Fény fotonok szimulációja  Nem változtatja meg a frekvenciát ütközéskor  Homogén és inhomogén közegben.
Socket programozás Példák
TRANZIENS ADATTÁROLÁS State objektum Egy alkalmazásszintű gyűjtemény (Dictionary), mely Tombstone esetén megőrzi tartalmát a memóriában kulcs/érték párokként.
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
Oracle multimédia Kiss Attila Információs Rendszerek Tanszék
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 
Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - III. / 1 13.Állományok, bejegyzések 14.Folyamok 15.Közvetlen hozzáférésű állomány.
Hasznos ismeretek Hogyan bővítsük ismereteinket AVRDUDEflags -E noreset.
Könyvtár, csomag és alprogramokVHDL Könyvtár, csomag és alprogram n Library és use n Package n Alprogramok –Procedure –Function –Resolution function Egy.
Térfogatvizualizáció Szirmay-Kalos László. Térfogati modellek v(x,y,z) hőmérséklet sűrűség légnyomás potenciál anyagfeszültség... v(x,y,z) tárolás: 3D.
Térfogatvizualizáció
Motor IIII. Vezérlés Szécsi László. Letöltés diák: //l09-engine4.ppt.
Motor IIII. PhysX utáni rendberakás Vezérlés Szécsi László.
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.
PhysX autó Szécsi László. Letöltés diák: bagira.iit.bme.hu/~szecsi/GraphGame //l12-car.ppt modell: bagira.iit.bme.hu/~szecsi/GraphGame //pickup.zip.
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:
Vízfelület Szécsi László. Nyílt víz a nyílt óceánon a felületi cseppecskék körmozgást végeznek trochoid hullámforma hullámhossz hullámmagasság amplitúdó.
PhysX integráció Szécsi László. Letöltés diák: bagira.iit.bme.hu/~szecsi/GraphGame //l11-physx.ppt modell: bagira.iit.bme.hu/~szecsi/GraphGame //pickup.zip.
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)\
Motor V. Ütközés detektálás és válasz Szécsi László.
V. labor Thread, animáció. Animáció A figurák a lépés kijelölése után nem rögtön az új helyen teremnek, hanem egyenes vonal mentén mozognak a cél felé.
OIS. Kezdeti teendők Letöltés: OgreLabControllersBase.zip Kicsomagol, betölt:.sln Additional include és library path beállítása Working directory beállítása.
Térfogatvizualizáció
II. labor Lépések kezelése. Új metódus a Square osztályba public static int letterToFileIndex(char letter) throws NumberFormatException { int i = 0; for.
III. labor AWT, eseménykezelés Applet. Új class: ButtonView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ButtonView.
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.
Grafikus játékok fejlesztése Szécsi László g10-engine
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.
 MipMap  glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA32F,...);  glFramebufferTexture2D(GL_FRAMEBUFFER,..., TexID, mipLevel);
 Kvantált kép fényesség értékei: G [ 0, Gmax ]  G fényességű pontok száma: P(G)
GPGPU labor XII. Tomográfiás rekonstrukció. Kezdeti teendők Tantárgy honlapja, Monte Carlo szimuláció A labor kiindulási alapjának letöltése (lab12_base.zip),
GPGPU labor X. Monte Carlo módszerek. Kezdeti teendők Tantárgy honlapja, Monte Carlo módszerek A labor kiindulási alapjának letöltése (lab10_base.zip),
GPGPU labor IX. Lineáris egyenletrendszerek megoldása.
GPGPU labor II. GPU mint vektor processzor. Kezdeti teendők Tantárgy honlapja, Bevezetés – Alap könyvtárak letöltése Tantárgy honlapja, GPU mint vektor.
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.
Számítógépes grafika DirectX 5. gyakorlat. Emlékeztető Háromdimenziós alapok befejezése Textúrázá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.
Számítógépes grafika OpenGL 5. gyakorlat.
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.
Szécsi László 3D Grafikus Rendszerek 4. labor
Vizualizáció és képszintézis
Vizualizáció és képszintézis
Kamera, 3D, transzformációk Szécsi László
OO framework, Egg util library László Szécsi
Environment mapping Szécsi László
Előadás másolata:

Transzformációk, textúrák, árnyalás Szécsi László

Modell /buggy.zip kibontani: GraphGame\media folderbe a buggy.x itt legyen: GraphGame\media\buggy\buggy.x

Új osztály Lab2Transform base class: EngineInterface

GraphGame.cpp Lab1 példány helyett Lab2 példányt hozzunk létre #include “Lab2Transform.h”

Vertex buffer helyett mesh class Lab2Transform : public EngineInterface { LPD3DXEFFECT effect; LPD3DXMESH mesh; int nSubMeshes; …

Lab2Transform.h metódusok public:Lab2Transform( LPDIRECT3DDEVICE9 device); HRESULT createDefaultResources(); HRESULT releaseDefaultResources(); HRESULT createManagedResources(); HRESULT releaseManagedResources(); void processMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void animate(double dt, double t); void render(); };

Effect betöltése hibakezeléssel HRESULT Lab2Transform::createDefaultResources(){ LPD3DXBUFFER compilationErrors; if(FAILED( D3DXCreateEffectFromFile(device, L"trafo.fx", NULL, NULL, 0, NULL, &effect, &compilationErrors))){ if(compilationErrors) MessageBoxA( NULL, (LPSTR)compilationErrors->GetBufferPointer(), "Failed to load effect file!", MB_OK); exit(-1); } return S_OK; }

Mesh betöltése HRESULT Lab2Transform::createManagedResources () { D3DXLoadMeshFromX( L"media\\buggy\\buggy.x", D3DXMESH_MANAGED, device, NULL, NULL, NULL, (DWORD*)&nSubMeshes, &mesh);

Mesh felszabadítása HRESULT Lab2Transform::releaseManagedResources () { mesh->Release(); return S_OK; }

mesh rajzolása effect->BeginPass(0); for(int i=0; i<nSubMeshes; i++) { mesh->DrawSubset(i); } effect->EndPass();

kamera class Lab2Transform : public LabInterface {... CFirstPersonCamera camera;...

kamera init Lab2Transform::Lab2Transform( LPDIRECT3DDEVICE9 device){ camera.SetViewParams( &D3DXVECTOR3(10, 10, 10), &D3DXVECTOR3(0, 0, 0)); camera.SetProjParams(3.14f / 2.0f, 1.0, 0.1, ); } eye lookat FOV aspectbackfront

kamera vezérlés & animáció void Lab2Transform::processMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ camera.HandleMessages( hWnd, uMsg, wParam, lParam); } void Lab2Transform::animate(double dt, double t) { camera.FrameMove(dt); }

új fx file solution explorer add new item txt file trafo.fx

trafo.fx uniform paraméterek float4x4 modelViewProjMatrix; float4x4 modelMatrix; float4x4 modelMatrixInverse;

trafo.fx input output szemantika struct TrafoInput{ float4 pos: POSITION; float3 normal: NORMAL; float2 tex: TEXCOORD0; }; struct TrafoOutput{ float4 pos: POSITION; float3 normal: TEXCOORD2; float2 tex: TEXCOORD0; float4 worldPos: TEXCOORD1; };

Vertex shader TrafoOutput vsTrafo(TrafoInput input){ TrafoOutput output = (TrafoOutput)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; } modell -> n.képernyő modell -> világ

pixel shader float4 psDiffuse(TrafoOutput input) : COLOR0 { return input.normal.y; }

technique technique show { pass ExamplePass { VertexShader = compile vs_2_0 vsTrafo(); PixelShader = compile ps_2_0 psDiffuse(); }

Lab2Transform cseréljük le az effect file és a technika nevét render metódusban, BeginScene előtt: rakjuk össze a trafómátrixokat D3DXMATRIX modelMatrix; D3DXMATRIX modelMatrixInverse; D3DXMATRIX modelViewProjMatrix;

mátrixok D3DXMatrixIdentity(&modelMatrix); D3DXMatrixInverse(&modelMatrixInverse, NULL, &modelMatrix); modelViewProjMatrix = modelMatrix * (*camera.GetViewMatrix()) * (*camera.GetProjMatrix());

paraméterátadás az effectnek effect-> SetMatrix("modelMatrix", &modelMatrix); effect-> SetMatrix("modelMatrixInverse", &modelMatrixInverse); effect-> SetMatrix("modelViewProjMatrix", &modelViewProjMatrix); effect->CommitChanges();

próba WASD + egér

textúrák class Lab2Transform : public LabInterface {... std::vector textures;

mesh betöltés anyaginfóval HRESULT Lab2Transform::createManagedResource s() { LPD3DXBUFFER materialBuffer; D3DXLoadMeshFromX( L"media\\buggy\\buggy.x", D3DXMESH_MANAGED, device, NULL, &materialBuffer, NULL, (DWORD*)&nSubMeshes, &mesh);

anyagok kibányászása D3DXMATERIAL* materialArray = (D3DXMATERIAL*) materialBuffer->GetBufferPointer();

textúrák betöltése for(int t=0; t<nSubMeshes; t++){ LPDIRECT3DTEXTURE9 texture; char textureFilePath[512]; strcpy(textureFilePath, "media\\buggy\\"); strcat(textureFilePath, materialArray[t].pTextureFilename); HRESULT hr = D3DXCreateTextureFromFileA( device, textureFilePath, &texture); if(hr == S_OK) textures.push_back(texture); else textures.push_back(NULL); }

textúrák felszabadítása HRESULT Lab2Transform::releaseManagedResources() { mesh->Release(); std::vector ::iterator i = textures.begin(); while(i != textures.end()) { if(*i != NULL) (*i)->Release(); } return S_OK; }

textúra sampler az effect fileban texture kdMap; sampler2D kdMapSampler = sampler_state{ texture = ; MinFilter = LINEAR; MagFilter = LINEAR; MipFilter = LINEAR; AddressU = Wrap; AddressV = Wrap; };

textúrázó pixel shader float4 psWhite(TrafoOutput input) : COLOR0 { return input.normal.y * tex2D(kdMapSampler, input.tex); }

rajzolás textúrákkal effect->BeginPass(0); for(int i=0; i<nSubMeshes; i++) { effect->SetTexture("kdMap", textures.at(i)); effect->CommitChanges(); mesh->DrawSubset(i); } effect->EndPass();