Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters...
-
Upload
abdiel-askin -
Category
Documents
-
view
226 -
download
3
Transcript of Environment mapping Szécsi László. copy-paste-rename gg007-Texture folder vcxproj, filters...
g008-EnvMap
Environment mapping
Szécsi László
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
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
fx/main.fx#include <envmapped.fx>
#9.0
Game.hclass Game{ID3D11ShaderResourceView* envTextureSrv;
#10.0
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
Game.cppID3DX11EffectPass* basicPass = effect->GetTechniqueByName("envmapped")->GetPassByName("envmapped");
Egg::Mesh::Material::P envmappedMaterial = Egg::Mesh::Material::create(basicPass, 0);
shadedMesh = binder->bindMaterial(envmappedMaterial, indexedMesh);
Game.cpp//render
effect->GetVariableByName("eyePos")->AsVector()->SetFloatVector( (float*)&firstPersonCam->getEyePosition());
Env map tükröződés kész
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
fx/envmapped.fxstruct IaosQuad{float4 pos: POSITION;float2 tex: TEXCOORD0;
};
struct VsosQuad{float4 pos: SV_POSITION;float2 tex: TEXCOORD0;float3 viewDir: TEXCOORD1;
};
#11.0
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
fx/envmapped.fxfloat4 psBackground(VsosQuad input) : SV_Target{return envTexture.Sample(linearSampler, input.viewDir);
}
#11.1
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
Game.hclass Game {Egg::Mesh::Shaded::P backgroundQuad;
#12.3
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
Game.cpp//releaseResourcesbackgroundQuad.reset();
#12.5
DxaEnvMapped.cpp// rendereffect->GetVariableByName("viewDirMatrix")->AsMatrix()
->SetMatrix( (float*)&firstPersonCam->getViewDirMatrix() );
shadedMesh->draw(context);
backgroundQuad->draw(context);
#12.6
Háttér kész