I know how to add simple dynamic point light support into the shader, but how do I add spotlight support?? Here is the Per Pixel Lighting (supporting 4 lights and the sun) from Slins collection, and spotlight doesn't work with it..
MATERIAL* OS_O_PerPixelLighting_ps20_mat =
{
effect =
"
//Variables
float4x4 matWorld;
float4x4 matWorldViewProj;
float4 vecFog;
float4 vecTime;
float4 vecColor;
float4 vecViewDir;
float4 vecViewPos;
float4 vecSunDir;
float4 vecSunColor;
float4 vecLight;
float4 vecLightPos[8];
float4 vecLightColor[8];
float fAlpha;
//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.rgb+0.5+saturate(dot(-vecSunDir,In.Norm))*vecSunColor;
float attenuation = 0;
for(int i = 0; i < 4; 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;
Color.a = step(0.5,Color.a);
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 { } }
";
}
If I assign this shader to terrain (just to see how it works) I get nothing, but if I debug via F11, I can see the spotlight.. WTF? Where can I read about spotlight stuff??
Here are the screens to show the problem:
Without debugging:

With debugging:

And as you can see, model isn't affected by light anyway.. only terrain, what could cause this?