From f7e593f8e9f8f32e4cbb74756133c2b89c97f58d Mon Sep 17 00:00:00 2001 From: Michel Breyer Date: Fri, 17 Nov 2017 15:15:11 +0100 Subject: [PATCH] Simplify the depth value transformations to reduce the number of operations --- .../TinyRendererVisualShapeConverter.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/examples/SharedMemory/TinyRendererVisualShapeConverter.cpp b/examples/SharedMemory/TinyRendererVisualShapeConverter.cpp index 31c0ff6d0..d44defa34 100644 --- a/examples/SharedMemory/TinyRendererVisualShapeConverter.cpp +++ b/examples/SharedMemory/TinyRendererVisualShapeConverter.cpp @@ -1031,12 +1031,15 @@ void TinyRendererVisualShapeConverter::copyCameraImageData(unsigned char* pixels // 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)); + // 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); - depthBuffer[i] = a + b / distance; + // The depth buffer value is between 0 and 1 + // float a = farPlane / (farPlane - nearPlane); + // float b = farPlane * nearPlane / (nearPlane - farPlane); + // depthBuffer[i] = a + b / distance; + + // Simply the above expressions + depthBuffer[i] = farPlane * (nearPlane + z_c) / (2. * farPlane * nearPlane + farPlane * z_c - nearPlane * z_c); } if (segmentationMaskBuffer) {