From ee2108ad2b06fb506c8573023cbe47f6cf110f4f Mon Sep 17 00:00:00 2001 From: Rod Kay Date: Tue, 9 Jan 2024 16:56:47 +1100 Subject: [PATCH] math.algebra.linear.d3: Handle case in 'unProject' where 'world_Position (4) = 0.0'. --- .../any_math-any_algebra-any_linear-any_d3.adb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/1-base/math/source/generic/pure/algebra/any_math-any_algebra-any_linear-any_d3.adb b/1-base/math/source/generic/pure/algebra/any_math-any_algebra-any_linear-any_d3.adb index 9439344..5fe9b89 100644 --- a/1-base/math/source/generic/pure/algebra/any_math-any_algebra-any_linear-any_d3.adb +++ b/1-base/math/source/generic/pure/algebra/any_math-any_algebra-any_linear-any_d3.adb @@ -880,13 +880,14 @@ is if world_Position (4) = 0.0 then - raise Constraint_Error with "unProject: world_Position (4) = 0.0"; - else - world_Position (1) := world_Position (1) / world_Position (4); - world_Position (2) := world_Position (2) / world_Position (4); - world_Position (3) := world_Position (3) / world_Position (4); + world_Position (4) := Real'Epsilon; + -- raise Constraint_Error with "unProject: world_Position (4) = 0.0"; -- TODO: Find out why this happens. end if; + world_Position (1) := world_Position (1) / world_Position (4); + world_Position (2) := world_Position (2) / world_Position (4); + world_Position (3) := world_Position (3) / world_Position (4); + return Vector_3 (world_Position (1 .. 3)); end unProject;