![]() |
|
#1
|
|||
|
|||
|
Extracting high precision depth map from scene
Hello,
I'm new to using Vizard, and attempting to extract high-precision depth data from a scene. At the moment, to do this, I am using: Code:
depth = viz.addRenderTexture(format=viz.TEX_DEPTH_32)
float_buff = depth.saveToBuffer('<raw>', dataType=viz.GL_FLOAT)
size = depth.getSize()
w = size[0]
h = size[1]
d_float = np.fromstring(float_buff, np.float32, w*h)
np.save('depth.npy', d_float.reshape((w, h)))
This allows me to save the values of the depth render texture to a numpy array... but I have a few questions:
Any guidance would be appreciated. Thanks, Joe |
|
#2
|
|||
|
|||
|
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)) |
|
#3
|
|||
|
|||
|
Hi Jeff,
I forgot to reply to this at the time -- but thank you for your answer, it solved the issue for me. |
![]() |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Copying Scene? | Brett Lindberg | Vizard | 0 | 08-28-2009 11:56 PM |