Game Development Stack Exchange is a question and answer site for professional and independent game developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've been trying to get my world space position of my pixel but I'm 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);
    //; // 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 I move the light volume update properly.

share|improve this question

Does section 27-1 of the following article help?

I used this a while back and it worked perfectly, the type of projection (orthographic Vs perspective) should not be important as long as you can calculate the inverse view projection matrix.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.