The depth buffer on GPUs is non-linear, in order to provide greater precision to nearby objects.
You can convert a raw depth buffer value to linear and world units using the following code:
Code:
z = <raw depth buffer value>
znear = viz.MainWindow.getNearClip()
zfar = viz.MainWindow.getFarClip()
# Compute normalized linear depth value (0-1 range)
linear = (2 * znear) / (zfar + znear - z * (zfar - znear))
# Compute world depth value (distance from view plane)
world = (2.0 * znear * zfar) / (zfar + znear - (2.0 * z - 1.0) * (zfar - znear))