Šviesos atspindėjimas

Iš testwiki.
19:06, 6 kovo 2019 versija, sukurta imported>Paraboloid
(skirt) ← Ankstesnė versija | Dabartinė versija (skirt) | Vėlesnė versija → (skirt)
Pereiti į navigaciją Jump to search
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:
Vr=(Vi2*(ViN)*N),
čia N yra normalės vektorius; Vr yra atspindėtas view vektorius.


Nuorodos

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


High_Level_Shading_Language