Jump to content

  • Log In with Google      Sign In   
  • Create Account


Fragment Depth in glsl


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 zetwalnwar   Members   -  Reputation: 100

Like
0Likes
Like

Posted 22 February 2012 - 07:48 PM

Hello

I'm looking for a way to get the correct depth value in GLSL. I am rendering a cube and I am stepping inside that cube (it's a volume rendering application).

In the picture below
drawing.png

The blue dots should have a deeper z value than the red one. However, when I am displaying the value of z as a color, I am getting the same color at the blue (on the outside) as the red dot which is in front (meaning I am getting the same depth). I am trying with gl_FragCoord.z (and tried several others too). Does anyone have a suggestion what I could use.

Thanks

Attached Thumbnails

  • drawing.png


Sponsor:

#2 NumberXaero   Prime Members   -  Reputation: 1401

Like
0Likes
Like

Posted 22 February 2012 - 08:25 PM

Is depth being output as a color? is the color the only info you are going on? the values may be very close together and may look the same, but may not be.

#3 Tsus   Members   -  Reputation: 1022

Like
0Likes
Like

Posted 25 February 2012 - 02:27 AM

Hi!

How are you doing your volume rendering?

Are you doing ray marching in the fragment shader and are you looking at isosurfaces? Then you probably have just rendered a viewport quad and start marching until you find the isovalue. In that case you should look how far you have traveled along the ray and use this as depth. (Well this is rather distance than depth. The blue dots would have the same depth, but a different distance. But you can always compute the depth by projecting the distance on the view ray of the center pixel.) When doing ray marching gl_FragCoord.z does not have any meaning, since you just render a quad. (In this case gl_FragCoord.z gives you probably the same value all over the viewport…)

Or are you doing it by some sort of slicing? If you place your slices in world/view space then it should be safe to use the depth. In fact you want linear depth values, right? In a fragment shader you could get them like this:
linearDepth = 1.0 / gl_FragCoord.w; // get view space depth
scaled = (linearDepth - BoxNear) / (BoxFar – BoxNear); // normalize to [0..1]
gl_FragCoord.w stores the reciprocal of the depth in view space (positive in front of the camera).
BoxNear and BoxFar are the maximum extends of the box you’re looking at along the z-axis in view space.

Is depth being output as a color? is the color the only info you are going on? the values may be very close together and may look the same, but may not be.

Indeed, it may already be correct (in case you're slicing), but not scaled properly to let you see it. You could try to scale the depths a little so that the front of the box is mapped to black and the back to white (as I have done above).

Cheers!

Acagamics e.V. – IGDA Student Game Development Club (University of Magdeburg, Germany)





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS