From 24cbdb5ab9c52bc09721c3c3674d2067f3fe6411 Mon Sep 17 00:00:00 2001 From: Nathan Vegdahl Date: Thu, 30 Jun 2016 19:33:44 -0700 Subject: [PATCH] Fixed bug in ray/triangle intersection code. It was counting intersections behind the ray. --- src/triangle.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/triangle.rs b/src/triangle.rs index 3f15dd7..9b0a0e6 100644 --- a/src/triangle.rs +++ b/src/triangle.rs @@ -16,6 +16,11 @@ pub fn intersect_ray(ray: &Ray, tri: (Point, Point, Point)) -> Option<(f32, f32, let tvec = ray.orig - tri.0; let qvec = cross(tvec, edge1); + let t = dot(edge2, qvec) * inv_det; + if t < 0.0 { + return None; + } + let u = dot(tvec, pvec) * inv_det; if u < 0.0 || u > 1.0 { return None; @@ -26,7 +31,6 @@ pub fn intersect_ray(ray: &Ray, tri: (Point, Point, Point)) -> Option<(f32, f32, return None; } - let t = dot(edge2, qvec) * inv_det; return Some((t, u, v)); } else { return None;