Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters...

19
g008-EnvMap Environment mapping Szécsi László

Transcript of Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters...

Page 1: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

g008-EnvMap

Environment mapping

Szécsi László

Page 2: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

gg008-EnvMap project

• copy-paste-rename gg007-Texture folder• vcxproj, filters átnevezés• solution/add existing project• rename project• working dir: $(SolutionDir)• Project Properties/Configuration

Properties/Debugging/Command Arguments--solutionPath:"$(SolutionDir)" --projectPath:"$(ProjectDir)"

• build, run

Page 3: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

fx/envmapped.fx#include <textured.fx>

float3 eyePos;TextureCube envTexture;

float4 psEnvMapped(VsosTrafo input) : SV_Target{

float3 viewDir = normalize(input.worldPos - eyePos);float3 reflectionDir = reflect(viewDir, input.normal);return 0.5 * envTexture.Sample(linearSampler, reflectionDir) + 0.5 * kdTexture.Sample(linearSampler, input.tex);

}

technique11 envmapped{

pass envmapped{SetVertexShader ( CompileShader( vs_5_0, vsTrafo() ) );SetPixelShader( CompileShader( ps_5_0, psEnvMapped() ) );}

}

#9.0

Page 4: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

fx/main.fx#include <envmapped.fx>

#9.0

Page 5: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

Game.hclass Game{ID3D11ShaderResourceView* envTextureSrv;

#10.0

Page 6: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

Game.cpp// createResources

D3DX11CreateShaderResourceViewFromFileA(device,systemEnvironment.resolveMediaPath( "cloudyNoon.dds" ).c_str(),

NULL, NULL, &envSrv, NULL);

effect->GetVariableByName("envTexture")->AsShaderResource()->SetResource(envSrv);

// releaseResourcesenvSrv->Release();

#10.1

Page 7: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

Game.cppID3DX11EffectPass* basicPass = effect->GetTechniqueByName("envmapped")->GetPassByName("envmapped");

Egg::Mesh::Material::P envmappedMaterial = Egg::Mesh::Material::create(basicPass, 0);

shadedMesh = binder->bindMaterial(envmappedMaterial, indexedMesh);

Page 8: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

Game.cpp//render

effect->GetVariableByName("eyePos")->AsVector()->SetFloatVector( (float*)&firstPersonCam->getEyePosition());

Page 9: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

Env map tükröződés kész

Page 10: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

Látsszon a környezet a háttérben

• full-viewport quad– új mesh– Mesh::Indexed::createQuad()

• minden pixel olyan színű amilyen irányban látszik– vsQuad– psBackground– envmapped|background pass

Page 11: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

fx/envmapped.fxstruct IaosQuad{float4 pos: POSITION;float2 tex: TEXCOORD0;

};

struct VsosQuad{float4 pos: SV_POSITION;float2 tex: TEXCOORD0;float3 viewDir: TEXCOORD1;

};

#11.0

Page 12: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

fx/envmapped.fxfloat4x4 viewDirMatrix;

VsosQuad vsQuad(IaosQuad input){VsosQuad output = (VsosQuad)0;

output.pos = input.pos; float4 hWorldPosMinusEye = mul(input.pos, viewDirMatrix);

hWorldPosMinusEye /= hWorldPosMinusEye.w; output.viewDir = hWorldPosMinusEye.xyz;output.tex = input.tex;

return output;}

#11.1

Page 13: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

fx/envmapped.fxfloat4 psBackground(VsosQuad input) : SV_Target{return envTexture.Sample(linearSampler, input.viewDir);

}

#11.1

Page 14: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

fx/envmapped.fx

technique11 envmapped{

pass envmapped{

SetVertexShader ( CompileShader( vs_5_0, vsTrafo() ) );

SetPixelShader( CompileShader( ps_5_0, psEnvMapped() ) );}pass background{

SetVertexShader ( CompileShader( vs_5_0, vsQuad() ) );

SetPixelShader( CompileShader( ps_5_0, psBackground() ) );

}}

#11.1

Page 15: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

Game.hclass Game {Egg::Mesh::Shaded::P backgroundQuad;

#12.3

Page 16: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

Game.cpp//createResourcesEgg::Mesh::Indexed::P indexedQuad = Egg::Mesh::Indexed::createQuad(

device);ID3DX11EffectPass* backgroundPass = effect->GetTechniqueByName("envmapped")->GetPassByName("background");

Egg::Mesh::Material::P backgroundMaterial = Egg::Mesh::Material::create(

backgroundPass, 0);backgroundQuad = binder-> bindMaterial(backgroundMaterial, indexedQuad);

#12.4

Page 17: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

Game.cpp//releaseResourcesbackgroundQuad.reset();

#12.5

Page 18: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

DxaEnvMapped.cpp// rendereffect->GetVariableByName("viewDirMatrix")->AsMatrix()

->SetMatrix( (float*)&firstPersonCam->getViewDirMatrix() );

shadedMesh->draw(context);

backgroundQuad->draw(context);

#12.6

Page 19: Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters átnevezés solution/add existing project rename project working.

Háttér kész