I'm working on shadow mapping for my Game engine and I have a big problem.It makes me crazy and I can't find it for last week of debugging.
The problem is my shadow maps work when objects are fix.But after moving the light or other objects it doesn't work any more.When I want to debug it by PIX it shows the correct image in PIX.
It seems vertex shader for deph pass uses incorrect matrix but I can't find the problem.
P.S:I'm using deferred shading.
[source lang="cpp"]float4x4 WorldViewProjection;struct VertexShaderInput{ float4 Position : POSITION0; };struct VertexShaderOutput{ float4 Position : POSITION0; float2 Depth : TEXCOORD0;};VertexShaderOutput VertexShaderFunction(VertexShaderInput input){ VertexShaderOutput output; //float4 worldPosition = mul(World,input.Position); //float4x4 worldview = mul(World, View); //worldview = mul(worldview, Projection); //output.Position = mul(input.Position,worldview); output.Position = mul( WorldViewProjection,input.Position); //output.Depth = worldPosition-SpotlightPosition; output.Depth.x = output.Position.z; output.Depth.y = output.Position.w; return output;}struct PixelShaderOutput{ float4 Depth : COLOR0;};PixelShaderOutput PixelShaderFunction(VertexShaderOutput input): COLOR0{ PixelShaderOutput output; //float4 l=input.Depth-SpotlightPosition; //input.Depth/=input.Depth.w; //output.Depth =float4(0,0,0,0); //output Depth output.Depth =input.Depth.x/input.Depth.y; //output Depth return output;}technique buildPass{ pass Pass1 { VertexShader = compile vs_2_0 VertexShaderFunction(); PixelShader = compile ps_2_0 PixelShaderFunction(); }}[/source]
First image is the image befor rotating the car.
second image is what I see after rotating the car.
Third pic is what I see in PIX






