Šviesos atspindėjimas
- Verteksu shaderis yra toks:
float4x4 view_proj_matrix; float4 view_position; struct VS_OUTPUT { float4 Pos: POSITION; float2 TexCoord: TEXCOORD0; float3 Reflect: TEXCOORD1; }; VS_OUTPUT vs_main(float4 inPos: POSITION, float3 inNormal: NORMAL, float2 inTxr: TEXCOORD0) { VS_OUTPUT Out; // Compute the projected position and send out the texture coordinates Out.Pos = mul(view_proj_matrix, inPos); Out.TexCoord = inTxr; // Compute the reflection vector Out.Reflect = -reflect(view_position-inPos,inNormal); return Out; }
- Pixelių shaderis yra toks (jei medžiaga gali atspindėti 40 procentų):
sampler Wood; sampler EnvMap; float4 ps_main(float2 inTxr: TEXCOORD0,float3 inReflect: TEXCOORD1) : COLOR { // Output texture color with reflection map return 0.6*tex2D(Wood,inTxr)+0.4*texCUBE(EnvMap,inReflect); }
- Atspindėjimo formulė yra tokia:
- čia yra normalės vektorius; yra atspindėtas view vektorius.