How do I reconstruct depth in deferred rendering using an orthographic projection?
- by Jeremie
I've been trying to get my world space position of my pixel but I4m missing something.
I'm using a orthographic view for a 2.5d game. My depth is linear and this is my code.
float3 lightPos = lightPosition;
float2 texCoord = PostProjToScreen(PSIn.lightPosition)+halfPixel;
float depth = tex2D(depthMap, texCoord);
float4 position;
position.x = texCoord.x *2-1;
position.y = (1-texCoord.y)*2-1;
position.z = depth.r;
position.w = 1;
position = mul(position, inViewProjection);
//position.xyz/=position.w; // I comment it but even without it it doesn't work
float4 normal = (tex2D(normalMap, texCoord)-.5f) * 2;
normal = normalize(normal);
float3 lightDirection = normalize(lightPos-position);
float att = saturate(1.0f - length(lightDirection) /attenuation);
float lightning = saturate (dot(normal, lightDirection));
lightning*= brightness;
return float4(lightColor* lightning*att, 1);
I'm using a sphere but it's not working the way I want. I reproject the texture properly onto the sphere but the light coordinates in the pixel shader seems to be stuck at zero even if when I move the light volume update properly.