Hello my friends!

I am trying to implement some kind of this...

http://outerra.blogspot.pt/2012/11/maximizing-depth-buffer-range-and.html

Basically my problem is just changing the depth inside PixelShader.

When I change depth field, nothing happens, and I don't know why...

here is my .fx file:

float4x4 World; float4x4 View; float4x4 Projection; float4x4 WorldInverseTranspose; float4 AmbientColor; float4 DiffuseColor = float4(1, 1, 1, 1); float InvLogFar; float Radius; float3 LightDirection = float3(1, 0, 0); float DiffuseIntensity = 1.0; float Shininess = 200; float4 SpecularColor = float4(1, 1, 1, 1); float SpecularIntensity = 1; float3 ViewVector = float3(1, 0, 0); texture ModelTexture; sampler2D textureSampler = sampler_state { Texture = (ModelTexture); MinFilter = Linear; MagFilter = Linear; AddressU = Clamp; AddressV = Clamp; }; texture ModelTexture2; sampler2D textureSampler2 = sampler_state { Texture = (ModelTexture2); MinFilter = Linear; MagFilter = Linear; AddressU = Clamp; AddressV = Clamp; }; struct VS_INPUT { float4 Position : POSITION; float4 Normal : NORMAL; float2 TextureCoordinate : TEXCOORD; }; struct VS_OUTPUT { float4 ClipPosition : POSITION; float3 Normal : NORMAL; float4 Position : TEXCOORD0; float2 TextureCoordinate : TEXCOORD1; float3 ExactPos : TEXCOORD2; }; struct PS_OUTPUT { float4 Color0 : COLOR0; float Depth : DEPTH; }; VS_OUTPUT VS_Function(VS_INPUT input) { VS_OUTPUT output; // Change the position vector to be 4 units for proper matrix calculations. input.Position.w = 1.0f; // Calculate the position of the vertex against the world, view, and projection matrices. output.ClipPosition = mul(input.Position, World); output.ClipPosition = mul(output.ClipPosition, View); output.ClipPosition = mul(output.ClipPosition, Projection); output.Normal = normalize(mul(input.Normal, WorldInverseTranspose)); output.TextureCoordinate = input.TextureCoordinate; output.ExactPos = input.Position; output.Position = output.ClipPosition; return output; } PS_OUTPUT PS_Function(VS_OUTPUT input) { float3 light = normalize(LightDirection); float3 normal = normalize(input.Normal); float3 r = normalize(2 * dot(light, normal) * normal - light); float3 v = normalize(mul(normalize(ViewVector), World)); float dotProduct = dot(r, v); float4 specular = SpecularIntensity * SpecularColor * max(pow(abs(dotProduct), Shininess), 0); float4 textureColor = float4(1.0,1.0,1.0,1.0); if(dotProduct<0.1) dotProduct = 0.1; PS_OUTPUT output; output.Color0 = dotProduct*saturate(textureColor + AmbientColor + specular); output.Color0.a = 1.0; output.Depth = input.Position.z / input.Position.w; output.Depth = log(output.Depth+1)* InvLogFar; // InvLogFar = 1.0/log(Far + 1.0) return output; } technique Textured { pass Pass1 { VertexShader = compile vs_3_0 VS_Function(); PixelShader = compile ps_3_0 PS_Function(); } }

Please if you help me, I would be very happy :-)

Also my main goal is to show a path composed by real GPS Captured Points and Satellites, so I need a real world size, thats why I am applying a logarithm function to depth...

PS: I have already implemented in OpenGL and it worked, I don't know why it's not working with XNA...