Posted By: 3run
Spotlight vs. Dynamic light - 11/21/12 23:02
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..
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:
And as you can see, model isn't affected by light anyway.. only terrain, what could cause this?
Code:
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:
Quote:
Without debugging:
With debugging:
With debugging:
And as you can see, model isn't affected by light anyway.. only terrain, what could cause this?