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!