View Single Post
  #2  
Old 09-05-2019, 04:24 PM
Jeff Jeff is offline
WorldViz Team Member
 
Join Date: Aug 2008
Posts: 2,466
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))
Reply With Quote