![]() |
#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. |
![]() |
Thread Tools | |
Display Modes | Rate This Thread |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Copying Scene? | Brett Lindberg | Vizard | 0 | 08-29-2009 12:56 AM |