Motor II. Env map Spotlight Szécsi László. Letöltés www.iit.bme.hu/~szecsi/GraphGame /code/E/code/EggCoreSecondBase.zip Kibontani (vagy előző labor folyt.):

Slides:



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

Lua script Szécsi László
Optikai sugázrás hatása az emberi bőrre és szemre
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.
Bevezetés a tárgyakhoz Tárgyak  Objects are the containers for values of a specified type  Objects are either signals, variables or constants  Once.
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.
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.
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.
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
Oracle multimédia Kiss Attila Információs Rendszerek Tanszék
A megértés körei Binzberger Viktor Budapest Műszaki és Gazdaságtudományi Egyetem Filozófia és Tudománytörténet Tanszék.
PHP VI Adatbázisok, MySQL
PHP V Osztályok, Objektumok. Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name;
Windows Server 2008 { PowerShell }
WAP, WML Felhasznált források: Developer’s Guide v1.2 (Nokia WAP Toolkit) WML Reference v1.1.
Számítógépes grafika 3. gyakorlat.
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ó.
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
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.
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)\
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.
Sugárkövetés: ray-casting, ray-tracing
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.
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.
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.
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.
 Map  Reduce  Scan  Histogram  Compact const size_t dataSize = 1024; cl_kernel mapKernel = cl.createKernel(clProgram, "map"); float* hData = new.
 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 15.. Párhuzamos primitívek Map Reduce Scan Histogram Compact.
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.
2. gyakorlat DirectX 2007/2008 tavasz Klár Gergely
ELTE-IK, Számítógépes grafika 2./haladó 2. gyakorlat Klár Gergely.
Szebb és használhatóbb programok Vezérlőelemek dinamikus felhelyezése.
Vizualizáció és képszintézis
gg004-Mesh project copy-paste-rename gg002-App folder
Kamera, 3D, transzformációk Szécsi László
Environment mapping Szécsi László
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Függvénysablonok használata
Extended Static Checking for Java
Előadás másolata:

Motor II. Env map Spotlight Szécsi László

Letöltés /code/E/code/EggCoreSecondBase.zip Kibontani (vagy előző labor folyt.): diák: //l07-engine2.ppt

Próba Különböző színű űrhajók

Feladat: env map az egyikre 1.Effect fileba 1.Új technique: “envMapped” 2.Új sampler 3.VS marad 4.PS új 2.XML fileba 1.Új ShadedMesh 2.A "basic" roleban használjuk az "envMapped" techniqueet 3.Valamelyik Entity használja a SMt

Új sampler textureCUBE environmentCubeTexture; samplerCUBE environmentCubeSampler = sampler_state { texture = ; MipFilter = Linear; MagFilter = Linear; MinFilter = Linear; };

Új pixel shader 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) * 0.5; }

Új technique technique envMapped { pass ExamplePass { VertexShader = compile vs_2_0 vsTrafo(); PixelShader = compile ps_3_0 psEnvMapped(); }

Kód kiegészítés.fx fileban változó (már megvan): float3 eyePosition; EngineCore::render: effect->SetFloatArray("eyePosition", (float*)&currentCamera->second- >getEyePosition(), 3);

Új ShadedMesh

Új Entity

Feladat: környezet a háttérbe 1.Új mesh: quad.x (full viewport quad) 2.Új ShadedMesh: quad 1.Basic role: background 3.Új entity 4.Effect fileba 1.Új technique 2.VS quad rajzoló 3.PS envMap kiolvasó

Kód kiegészítés.fx fileban változó: float3 eyePosition; float4x4 rotProjMatrixInverse; EngineCore::render: rotProjMatrixInverse beállítása

Ez már megvan struct QuadInput { float4 pos: POSITION; float2 tex: TEXCOORD0; }; struct QuadOutput { float4 pos: POSITION; float2 tex: TEXCOORD0; float3 worldPosMinusEye: TEXCOORD1; }; 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; output.tex = input.tex; return output; };

Env map háttér technique float4 psBackground(QuadOutput input) : COLOR0 { float3 viewDir = normalize(input.worldPosMinusEye); return texCUBE(environmentCubeSampler, viewDir); } technique background { pass ExamplePass { CullMode = None; ZEnable = False; VertexShader = compile vs_2_0 vsQuad(); PixelShader = compile ps_2_0 psBackground(); }

Új ShadedMesh <Mesh name="quad" xFileName="media\\quad.x" autoShadedMesh="false" />

Feladat: Bővítés fényforrásokkal betöltése.fx-be Spotlight tömb basic technique pixel shaderének kiegészítése –ciklus –fények szerinti árnyalás

XML <Spotlight name="fixed" pos.x="0" pos.y="10" pos.z="0" dir.x="0" dir.y="-1" dir.z="0" power.r="1000" power.g="1000" power.b="1000"focus="5" /> <Spotlight name="shipLight" owner="flagShip" pos.x="-16" pos.y="0" pos.z="0" dir.x="-1" dir.y="0" dir.z="0" power.r="10" power.g="1000" power.b="10"focus="5" />

Új class: Spotlight class Entity; class NodeGroup; class RenderContext; /// Light source class for point-like, directed light sources. class Spotlight { protected: /// Entity the light is moving with. Can be NULL for a fixed light. Entity* owner; /// Peak radiance of light source, emitted in main direction. D3DXVECTOR3 peakRadiance; /// Light source position, relative to owner entity. In world space, if owner is NULL. D3DXVECTOR3 position; /// Main direction, at which the light source emits its peak radiance, relative to owner entity. In world space, if owner is NULL. D3DXVECTOR3 direction; /// Exponent for radiance falloff at directions further away from main direction. double focus; public: /// Constructor. Spotlight(const D3DXVECTOR3& peakRadiance, const D3DXVECTOR3& position, const D3DXVECTOR3& direction, double focus); /// Assigns owner entity to light. void setOwner(Entity* owner); /// Returns peak radiance. const D3DXVECTOR3& getPeakRadiance(); /// Returns world space position. D3DXVECTOR3 getPosition(); /// Returns world space direction. D3DXVECTOR3 getDirection(); /// Returns falloff exponent. float getFocus(); };

Spotlight.cpp #include "DXUT.h" #include "Spotlight.h" #include "Entity.h" #include "RenderContext.h" #include "NodeGroup.h" Spotlight::Spotlight(const D3DXVECTOR3& peakRadiance, const D3DXVECTOR3& position, const D3DXVECTOR3& direction, double focus) { this->peakRadiance = peakRadiance; this->position = position; this->direction = direction; this->focus = focus; this->owner = NULL; } void Spotlight::setOwner(Entity* owner) { this->owner = owner; } const D3DXVECTOR3& Spotlight::getPeakRadiance() { return peakRadiance; } D3DXVECTOR3 Spotlight::getPosition() { if(owner == NULL) return position; D3DXMATRIX ownerModelMatrix; owner->getModelMatrix(ownerModelMatrix); D3DXVECTOR3 worldPosition; D3DXVec3TransformCoord(&worldPosition, &position, &ownerModelMatrix); return worldPosition; } D3DXVECTOR3 Spotlight::getDirection() { if(owner == NULL) return direction; D3DXMATRIX ownerModelMatrix; owner->getModelMatrix(ownerModelMatrix); D3DXVECTOR3 worldDirection; D3DXVec3TransformNormal(&worldDirection, &direction, &ownerModelMatrix); return worldDirection; } float Spotlight::getFocus() { return focus; }

Directory.h class Spotlight; typedef std::map SpotlightDirectory;

EngineCore.h SpotlightDirectory spotlightDirectory;

EngineCore.h private: void loadSpotlights(XMLNode& xMainNode);

EngineCore.cpp void EngineCore::loadLevel() { … loadSpotlights(xMainNode); }

EngineCore.cpp void EngineCore::loadSpotlights(XMLNode& xMainNode) { int iSpotlight = 0; XMLNode spotlightNode; while( !(spotlightNode = xMainNode.getChildNode(L"Spotlight", iSpotlight)).isEmpty() ) { D3DXVECTOR3 position = spotlightNode.readVector(L"pos"); D3DXVECTOR3 direction = spotlightNode.readVector(L"dir"); D3DXVECTOR3 peakRadiance = spotlightNode.readVector(L"power"); double focus = spotlightNode.readDouble(L"focus"); Spotlight* spotlight = new Spotlight(peakRadiance, position, direction, focus); const wchar_t* ownerEntityName = spotlightNode|L"owner"; if(ownerEntityName != NULL) { EntityDirectory::iterator iEntity = entityDirectory.find(ownerEntityName); if(iEntity != entityDirectory.end()) { spotlight->setOwner(iEntity->second); } const wchar_t* spotlightName = spotlightNode|L"name"; spotlightDirectory[spotlightName] = spotlight; iSpotlight++; }

EngineCore:: releaseManagedResources { SpotlightDirectory::iterator i = spotlightDirectory.begin(); while(i != spotlightDirectory.end()) { delete i->second; i++; }

EngineCore::render SpotlightDirectory::iterator i = spotlightDirectory.begin(); int ci = 0; while(i != spotlightDirectory.end()) { char varname[128]; sprintf(varname, "spotlights[%d].peakRadiance", ci); effect->SetFloatArray(varname, (float*)&i->second->getPeakRadiance(), 3); sprintf(varname, "spotlights[%d].position", ci); effect->SetFloatArray(varname, (float*)&i->second->getPosition(), 3); sprintf(varname, "spotlights[%d].direction", ci); effect->SetFloatArray(varname, (float*)&i->second->getDirection(), 3); sprintf(varname, "spotlights[%d].focus", ci); effect->SetFloat(varname, i->second->getFocus()); i++; ci++; }

standard.fx struct Spotlight { float3 peakRadiance; float3 position; float3 direction; float focus; } spotlights[2]; int nSpotlights = 2;

textured.fx, psBasic float4 psBasic(TrafoOutput input) : COLOR0 { float3 lighting = 0.5; for(int il=0; il<nSpotlights; il++) { float3 lightDiff = spotlights[il].position - input.worldPos; float3 lightDir = normalize(lightDiff); lighting += spotlights[il].peakRadiance * max(0, dot(input.normal, lightDir)) * pow( max(0, dot(-lightDir,spotlights[il].direction)), spotlights[il].focus) /dot(lightDiff, lightDiff); } return float4( lighting * tex2D(kdMapSampler, input.tex) * kdColor, 1); }

Próba Fények hatása látszik