//Variables
float4x4 matWorld;
float4x4 matWorldViewProj;
float4 vecViewDir;
float4 vecViewPos;
float4 vecFog;
float4 vecTime;
float4 vecColor;
float4 vecLight;
float4 vecLightPos[8];
float4 vecLightColor[8];
//Textures
texture entSkin1;
//Sampler
sampler colorMap = sampler_state
{
Texture = (entSkin1);
AddressU = Wrap;
AddressV = Wrap;
MagFilter = Linear;
MinFilter = Linear;
MipFilter = Linear;
};
//Structs
struct VS_TO_PS // Output to the pixelshader
{
float4 Pos : POSITION;
float Fog : FOG;
float2 Tex0 : TEXCOORD0;
float3 WPos : TEXCOORD1;
float3 Norm : TEXCOORD2;
};
//Vertexshader
VS_TO_PS VS_v0( float4 inPos : POSITION,
float3 inNormal : NORMAL,
float2 inTex0 : TEXCOORD0 )
{
VS_TO_PS Out;
//Do transformations
Out.Pos = mul(inPos,matWorldViewProj);
//Pass the Texcoords
Out.Tex0 = inTex0;
//Vertexposition in worldspace
Out.WPos = mul(inPos,matWorld);
//Vertexnormal
Out.Norm = normalize(mul(inNormal,matWorld));
//Fog
Out.Fog = 1 - (distance(Out.WPos,vecViewPos)-vecFog.x) * vecFog.z;
return Out;
}
//Pixelshader
float4 PS_p0( VS_TO_PS In ) : COLOR
{
float3 LightDir;
float3 Diffuse = vecLight+0.5;
float attenuation = 0;
for(int i = 0; i < 5; i++)
{
LightDir = vecLightPos[i]-In.WPos;
attenuation = saturate(1.0f - length(LightDir/vecLightPos[i].w));
Diffuse += saturate(dot(normalize(LightDir),In.Norm))*vecLightColor[i]*attenuation;
}
float4 Color = tex2D(colorMap,In.Tex0);
Color.rgb *= Diffuse;
return Color;
}
//////////////////////////////////////////////////////////////////
technique Lighting
{
pass one
{
AlphaTestEnable = True;
zWriteEnable = true;
VertexShader = compile vs_1_1 VS_v0();
PixelShader = compile ps_2_0 PS_p0();
}
}
technique fallback { pass one { } }