Environment mapping Szécsi László. Új osztály: Lab3EnvMap copy&paste: Lab2Trafo.h -> Lab3EnvMap.h copy&paste: Lab2Trafo.cpp -> Lab3EnvMap.cpp copy&paste:

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

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.
GraphGame gg001-Triangle
Lua script Szécsi 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.
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.
GPGPU labor I. OpenGL, Cg.
GPGPU labor V. GPU ray tracing. Kezdeti teendők Tantárgy honlapja, GPU ray tracing A labor kiindulási alapjának letöltése (lab5_base.zip), kitömörítés.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
C# tagfüggvények.
Fejlett grafikai algoritmusok Megvilágítási modellek
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 
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 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.
Fraktálok és csempézések
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ó.
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ó.
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)\
Térfogatvizualizáció
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.
Grafikus játékok fejlesztése Szécsi László g10-engine
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.
GPGPU labor III. Iteratív algoritmusok. Kezdeti teendők Tantárgy honlapja, Iteratív algoritmusok A labor kiindulási alapjának letöltése (lab3base.zip),
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.
Jeni László Attila Klár Gergely
2. gyakorlat DirectX 2007/2008 tavasz Klár Gergely
ELTE-IK, Számítógépes grafika 2./haladó 2. gyakorlat Klár Gergely.
Vizualizáció és képszintézis Sugárkövetés (Dart + GLSL) Szécsi László.
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.
Vizualizáció és képszintézis Térfogati textúrák kezelése (Dart + GLSL) Szécsi László.
Lighting III.
A grafikus hardware programozása
Szécsi László 3D Grafikus Rendszerek 4. labor
Unity, Anyagok, megvilágítás
Vizualizáció és képszintézis
Vizualizáció és képszintézis
Szécsi László 3D Grafikus Rendszerek 14. előadás
Vizualizáció és képszintézis
gg004-Mesh project copy-paste-rename gg002-App folder
Alapok Model betöltés Anyagjellemzők Fényforrások Shaderek
Kamera, 3D, transzformációk Szécsi László
OpenGL II.
Material+ kioptimalizált uniformok
OpenGL kiterjesztések (extensions)
Direct3D DirectCompute
Environment mapping Szécsi László
CUDA – OpenGL.
Előadás másolata:

Environment mapping Szécsi László

Új osztály: Lab3EnvMap copy&paste: Lab2Trafo.h -> Lab3EnvMap.h copy&paste: Lab2Trafo.cpp -> Lab3EnvMap.cpp copy&paste: trafo.fx -> envmap.fx search&replace ebben a két fileban: Lab2Trafo -> Lab3EnvMap Effect betöltésnél: envmap.fx

Lab2 példány helyett Lab3 példányt hozzunk létre #include “Lab3EnvMap.h” HRESULT CALLBACK OnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ) { engine = new Lab2Transform(pd3dDevice); engine = new Lab3EnvMap(pd3dDevice); Globális példány kicserélése FILEGraphGame.cppOPdel/add codeFUNCOnD3D9CreateDevice

Első laborból copy&paste, nevezzük át quad~-ra: class Lab3Envmap : public EngineInterface { LPDIRECT3DVERTEXBUFFER9 quadVertexBuffer; struct QuadVertex{ D3DXVECTOR3 pos; D3DXVECTOR3 tex; }; Full viewport quad FILELab3EnvMap.hOPnew memberCLASSLab3EnvMap

HRESULT Lab3EnvMap::createDefaultResources() { device->CreateVertexBuffer( 4 * sizeof(QuadVertex), D3DUSAGE_DYNAMIC|D3DUSAGE_WRITEONLY, D3DFVF_XYZ | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE3(0), D3DPOOL_DEFAULT, &quadVertexBuffer, NULL);... Vertex buffer létrehozása FILELab3EnvMap.cppOPadd codeCLASSLab3EnvMap METHODcreateDefaultResources

QuadVertex* vertexData; quadVertexBuffer->Lock(0, 0, (void**)&vertexData, D3DLOCK_DISCARD); vertexData[0].pos = D3DXVECTOR3(-1.0f, 1.0f, 0.0f); vertexData[1].pos = D3DXVECTOR3(1.0f, 1.0f, 0.0f); vertexData[2].pos = D3DXVECTOR3(-1.0f, -1.0f, 0.0f); vertexData[3].pos = D3DXVECTOR3(1.0f, -1.0f, 0.0f); vertexData[0].tex = D3DXVECTOR3(0.0f, 0.0f, 0.0f); vertexData[1].tex = D3DXVECTOR3(1.0f, 0.0f, 0.0f); vertexData[2].tex = D3DXVECTOR3(0.0f, 1.0f, 0.0f); vertexData[3].tex = D3DXVECTOR3(1.0f, 1.0f, 0.0f); quadVertexBuffer->Unlock(); Vertex buffer feltöltése FILELab3EnvMap.cppOPadd codeCLASSLab3EnvMap METHODcreateDefaultResources

HRESULT Lab3EnvMap:: releaseDefaultResources() { quadVertexBuffer->Release(); return S_OK; } Vertex buffer felszabadítása FILELab3EnvMap.cppOPadd codeCLASSLab3EnvMap METHODreleaseDefaultResources

... device->BeginScene(); device->SetStreamSource(0, quadVertexBuffer, 0, sizeof(QuadVertex)); device->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE3(0)); device->DrawPrimitive (D3DPT_TRIANGLESTRIP, 0, 2); device->EndScene(); } Full viewport quad rajzolás FILELab3EnvMap.cppOPedit codeCLASSLab3EnvMap METHODrender

próba téglalap, lefedi a viewportot

Effect Először: rajzoljuk ki a hátteret Cube map textúra: doboz 6 oldallal cloudyNoon.dds letöltése Régen: NAGY doboz vagy gömb skybox, skydome Most már van shader amiben kiszámíthatjuk mi látszik a pixelben: full viewport quad

struct QuadInput { float4 pos: POSITION; float2 tex: TEXCOORD0; }; struct QuadOutput { float4 pos: POSITION; float2 tex: TEXCOORD0; float3 worldPosMinusEye: TEXCOORD1; }; Input-output szemantika FILEenvmap.fxOPnew structFUNC::

float4x4 rotProjMatrixInverse; QuadOutput vsQuad(QuadInput input) { QuadOutput output = (QuadOutput)0; output.pos = input.pos; float4 hWorldPosMinusEye = mul(input.pos, rotProjMatrixInverse); hWorldPosMinusEye /= hWorldPosMinusEye.w; output.worldPosMinusEye = hWorldPosMinusEye.xyz; output.pos.z = 1; // minden mögé output.tex = input.tex; return output; }; Vertex shader FILEenvmap.fxOPnew funcFUNCvsQuad

textureCUBE environmentCubeTexture; samplerCUBE environmentCubeSampler = sampler_state { texture = ; MipFilter = Linear; MagFilter = Linear; MinFilter = Linear; }; Textúra és sampler FILEenvmap.fxOPnew varFUNC::

float4 psEnvironment(QuadOutput input) : COLOR0 { return texCUBE(environmentCubeSampler, input.worldPosMinusEye); }; Pixel shader FILEenvmap.fxOPnew funcFUNCpsEnvironment

technique environment { pass P0 { VertexShader = compile vs_3_0 vsQuad(); PixelShader = compile ps_3_0 psEnvironment(); } }; Környezet háttér technique FILEenvmap.fxOPnew techniqueFUNC::

const D3DXVECTOR3& eyePos = *camera.GetEyePt(); D3DXMATRIX eyePosTranslationMatrix; D3DXMatrixTranslation(&eyePosTranslationMatrix, eyePos.x, eyePos.y, eyePos.z); D3DXMATRIX rpmi; D3DXMatrixInverse(&rpmi, NULL, &(eyePosTranslationMatrix * *camera.GetViewMatrix() * *camera.GetProjMatrix())); effect->SetMatrix("rotProjMatrixInverse", &rpmi); Mátrix beállítása FILELab3EnvMap.cppOPadd codeCLASSLab3EnvMap METHODrender

class Lab3EnvMap { LPDIRECT3DCUBETEXTURE9 environmentCube; Textúra változó FILELab3EnvMap.hOPnew memberCLASSLab3EnvMap

HRESULT Lab3EnvMap::createManagedResources() { D3DXCreateCubeTextureFromFile(device, L"media\\cloudyNoon.dds", &environmentCube); Textúra betöltés FILELab3EnvMap.cppOPadd codeCLASSLab3EnvMap METHODcreateManagedResources

HRESULT Lab3EnvMap::releaseManagedResources() { environmentCube->Release(); Textúra felszabadítás FILELab3EnvMap.cppOPadd codeCLASSLab3EnvMap METHODreleaseManagedResources

effect-> SetTexture("environmentCubeTexture", environmentCube); Textúra bekötése az effecnek FILELab3EnvMap.cppOPadd codeCLASSLab3EnvMap METHODrender

effect->SetTechnique("environment"); effect->Begin(&a, 0); effect->BeginPass(0); device->SetStreamSource(0, quadVertexBuffer, 0, sizeof(QuadVertex)); device->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE3(0)); device->DrawPrimitive (D3DPT_TRIANGLESTRIP, 0, 2); effect->EndPass(); effect->End(); Rajzolás (pl. buggy rajzolása után) FILELab3EnvMap.cppOPadd codeCLASSLab3EnvMap METHODrender

Próba égbolt

float3 eyePosition; effect->SetFloatArray("eyePosition", (float*)camera.GetEyePt(), 3); Szempozíció: Uniform paraméter FILEenvmap.fxOPverify varFUNC:: Bekötése FILELab3EnvMap.cppOPverify codeCLASSLab3EnvMap METHODrender

float4 psEnvMapped(TrafoOutput input) : COLOR0 { float3 viewDir = normalize(eyePosition - input.worldPos); float3 reflectionDir = reflect(-viewDir, input.normal); return texCUBE(environmentCubeSampler, reflectionDir); } Tükröződés a modellen FILEenvmap.fxOPnew funcFUNCpsEnvMapped

technique envmapped { pass P0 { VertexShader = compile vs_3_0 vsTrafo(); PixelShader = compile ps_3_0 psEnvMapped(); } }; Environment mapping technique FILEenvmap.fxOPnew techniqueFUNC::

effect->SetTechnique("envmapped"); Buggy rajzolása envmapped techniqueval FILELab3EnvMap.cppOPedit codeCLASSLab3EnvMap METHODrender

float4 psEnvMapped(TrafoOutput input) : COLOR0 { float3 viewDir = normalize(eyePosition - input.worldPos); float3 reflectionDir = reflect(-viewDir, input.normal); return tex2D(kdMapSampler, input.tex) * texCUBE(environmentCubeSampler, reflectionDir); } Kd textúra FILEenvmap.fxOPadd codeFUNCpsEnvMapped