From bcda0511b1c6e9d69533048dfa16bdf44ad0a6f2 Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Sun, 9 Jan 2022 19:31:41 +0100 Subject: [PATCH] Add vector.ray_parallelogram_intersection --- vector.lua | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/vector.lua b/vector.lua index d611a23..a5ab234 100644 --- a/vector.lua +++ b/vector.lua @@ -206,8 +206,7 @@ function box_box_collision(diff, box, other_box) return true end ---+ Möller-Trumbore -function ray_triangle_intersection(origin, direction, triangle) +local function moeller_trumbore(origin, direction, triangle, is_tri) local point_1, point_2, point_3 = unpack(triangle) local edge_1, edge_2 = subtract(point_2, point_1), subtract(point_3, point_1) local h = cross3(direction, edge_2) @@ -223,7 +222,7 @@ function ray_triangle_intersection(origin, direction, triangle) end local q = cross3(diff, edge_1) local v = f * dot(direction, q) - if v < 0 or u + v > 1 then + if v < 0 or (is_tri and u or 0) + v > 1 then return end local pos_on_line = f * dot(edge_2, q) @@ -232,6 +231,14 @@ function ray_triangle_intersection(origin, direction, triangle) end end +function ray_triangle_intersection(origin, direction, triangle) + return moeller_trumbore(origin, direction, triangle, true) +end + +function ray_parallelogram_intersection(origin, direction, parallelogram) + return moeller_trumbore(origin, direction, parallelogram) +end + function triangle_normal(triangle) local point_1, point_2, point_3 = unpack(triangle) local edge_1, edge_2 = subtract(point_2, point_1), subtract(point_3, point_1)