Š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.


Nuorodos

keisti

http://en.wikipedia.org/wiki/Specular_highlight


High_Level_Shading_Language