From bc97901858458f15d2c17becb7d39c05b897edae Mon Sep 17 00:00:00 2001 From: Julius Nehring-Wirxel <julius.nehring-wirxel@rwth-aachen.de> Date: Thu, 30 Nov 2023 16:30:54 +0100 Subject: [PATCH] Fix numerical bug in the glow-viewer --- viewer/glow-extras/viewer/ViewerRenderer.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/viewer/glow-extras/viewer/ViewerRenderer.cc b/viewer/glow-extras/viewer/ViewerRenderer.cc index c96b868e..d17f6a31 100644 --- a/viewer/glow-extras/viewer/ViewerRenderer.cc +++ b/viewer/glow-extras/viewer/ViewerRenderer.cc @@ -484,7 +484,12 @@ void glow::viewer::ViewerRenderer::renderSubview( p.y += s.y * y; p.z += s.z * z; auto pd = normalize(p - sunPosJitter); - sunFov = tg::max(tg::acos(dot(sunDir, pd)) * 2, sunFov); + auto dot = tg::dot(sunDir, pd); + // assure dot is in [-1, 1] so that acos is well defined. + // even though the dot product of two normalized vectors should be in [-1, 1], + // numerical errors can lead to values slightly outside this range. + dot = tg::clamp(dot, -1.0f, 1.0f); + sunFov = tg::max(tg::acos(dot) * 2, sunFov); } auto sunView = tg::look_at_opengl(sunPosJitter, boundingInfo.center, tg::vec3::unit_x); -- GitLab