From 861c046ed527474a18a1358246a818ce70bb0b75 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Wed, 14 Feb 2024 02:07:04 +0000 Subject: Check ray intersects triangle 'in front' of start --- lib/ray.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/ray.h') diff --git a/lib/ray.h b/lib/ray.h index e1f43c3..67fdd12 100644 --- a/lib/ray.h +++ b/lib/ray.h @@ -47,11 +47,11 @@ public: RelativeDistance & distance) const { if constexpr (std::is_floating_point_v) { - return glm::intersectRayTriangle(start, direction, t0, t1, t2, bary, distance); + return glm::intersectRayTriangle(start, direction, t0, t1, t2, bary, distance) && distance >= 0.F; } else { const RelativePosition3D t0r = t0 - start, t1r = t1 - start, t2r = t2 - start; - return glm::intersectRayTriangle({}, direction, t0r, t1r, t2r, bary, distance); + return glm::intersectRayTriangle({}, direction, t0r, t1r, t2r, bary, distance) && distance >= 0.F; } } -- cgit v1.2.3 From c0ff72c1aef7f1ad502b838af899cb0a9be35263 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 18 Mar 2024 00:04:18 +0000 Subject: Add Ray::intersectPlane --- lib/ray.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'lib/ray.h') diff --git a/lib/ray.h b/lib/ray.h index 67fdd12..a831270 100644 --- a/lib/ray.h +++ b/lib/ray.h @@ -42,6 +42,18 @@ public: }) != positions.end(); } + bool + intersectPlane(const PositionType orig, const Direction3D norm, RelativeDistance & distance) const + { + if constexpr (std::is_floating_point_v) { + return glm::intersectRayPlane(start, direction, orig, norm, distance) && distance >= 0.F; + } + else { + const RelativePosition3D origr = orig - start; + return glm::intersectRayPlane({}, direction, origr, norm, distance) && distance >= 0.F; + } + } + bool intersectTriangle(const PositionType t0, const PositionType t1, const PositionType t2, BaryPosition & bary, RelativeDistance & distance) const -- cgit v1.2.3