diff --git a/components/renderers/cpp/src/triangle_render.cu b/components/renderers/cpp/src/triangle_render.cu index ccd50b456d02de3e59e2ae8c8e97724922fb78c3..21c565ccc8a042f45e95cf0c5e4b745b90430b74 100644 --- a/components/renderers/cpp/src/triangle_render.cu +++ b/components/renderers/cpp/src/triangle_render.cu @@ -90,6 +90,17 @@ __device__ static barycentricCoord.z >= 0.0 && barycentricCoord.z <= 1.0; } + /** + * For a given barycentric coordinate, compute the corresponding z position + * (i.e. depth) on the triangle. + */ +__device__ static +float getZAtCoordinate(const float3 &barycentricCoord, const float (&tri)[3]) { + return (barycentricCoord.x * tri[0] + + barycentricCoord.y * tri[1] + + barycentricCoord.z * tri[2]); +} + /* * Convert source screen position to output screen coordinates. */ @@ -155,7 +166,8 @@ __device__ static float new_depth = (maxlen == 0.0f) ? d[0] : (d[0]*dist1 + d[1]*dist2 + d[2]*dist3) / (dist1+dist2+dist3); //if (new_depth < params.camera.minDepth || new_depth > params.camera.maxDepth) continue;*/ - float new_depth = d[0]; + //float new_depth = d[0]; //(A > 0) ? (B > 0) ? 6.0f : 5.0f : (B > 0) ? 4.0f : 3.0f; + float new_depth = getZAtCoordinate(baryCentricCoordinate, d); atomicMin(&depth_out(sx,sy), int(new_depth*1000.0f)); }