From 5138fe2c55548be736374978ca74538137de66c1 Mon Sep 17 00:00:00 2001 From: Michel Breyer Date: Fri, 17 Nov 2017 14:45:37 +0100 Subject: [PATCH] Fix wrong depth values returned by TinyRenderer --- .../SharedMemory/TinyRendererVisualShapeConverter.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/SharedMemory/TinyRendererVisualShapeConverter.cpp b/examples/SharedMemory/TinyRendererVisualShapeConverter.cpp index 8274e0bc3..b237e412c 100644 --- a/examples/SharedMemory/TinyRendererVisualShapeConverter.cpp +++ b/examples/SharedMemory/TinyRendererVisualShapeConverter.cpp @@ -1025,12 +1025,13 @@ void TinyRendererVisualShapeConverter::copyCameraImageData(unsigned char* pixels { if (depthBuffer) { - float distance = -m_data->m_depthBuffer[i+startPixelIndex]; float farPlane = m_data->m_camera.getCameraFrustumFar(); float nearPlane = m_data->m_camera.getCameraFrustumNear(); - - btClamp(distance,nearPlane,farPlane); - + + // TinyRenderer returns clip coordinates, transform to eye coordinates first + float z_c = -m_data->m_depthBuffer[i+startPixelIndex]; + float distance = (farPlane - nearPlane) / (farPlane + nearPlane) * (z_c + 2. * farPlane * nearPlane / (farPlane - nearPlane)); + // the depth buffer value is between 0 and 1 float a = farPlane / (farPlane - nearPlane); float b = farPlane * nearPlane / (nearPlane - farPlane);