Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


#Actualhdlopesrocha

Posted 02 October 2013 - 08:51 PM

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...


#4hdlopesrocha

Posted 02 October 2013 - 08:37 PM

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 = abs(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...


#3hdlopesrocha

Posted 02 October 2013 - 08:36 PM

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 = abs(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, 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...


#2hdlopesrocha

Posted 02 October 2013 - 08:29 PM

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 = abs(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 :-)

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


#1hdlopesrocha

Posted 02 October 2013 - 08:28 PM

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 = abs(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();
    }
}


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

 


PARTNERS