From 468cba97b31c042800a96d8f3749df2147cc729b Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Wed, 18 Jan 2023 20:17:05 -0800 Subject: [PATCH] rtiow: remove unused ray/triangle intersection implementations. --- rtiow/renderer/src/triangles.rs | 87 +-------------------------------- 1 file changed, 2 insertions(+), 85 deletions(-) diff --git a/rtiow/renderer/src/triangles.rs b/rtiow/renderer/src/triangles.rs index 7a5d528..1fef141 100644 --- a/rtiow/renderer/src/triangles.rs +++ b/rtiow/renderer/src/triangles.rs @@ -71,7 +71,7 @@ where } /// Based on https://www.scratchapixel.com/lessons/3d-basic-rendering/ray-tracing-rendering-a-triangle/moller-trumbore-ray-triangle-intersection.html -fn ray_triangle_intersect_moller_trumbore1(r: Ray, tri: &Triangle) -> Option { +fn ray_triangle_intersect_moller_trumbore(r: Ray, tri: &Triangle) -> Option { // #ifdef MOLLER_TRUMBORE // Vec3f v0v1 = v1 - v0; // Vec3f v0v2 = v2 - v0; @@ -133,88 +133,6 @@ fn ray_triangle_intersect_moller_trumbore1(r: Ray, tri: &Triangle) -> Option Option { - let v0 = tri.verts[0]; - let v1 = tri.verts[1]; - let v2 = tri.verts[2]; - - let edge1 = v1 - v0; - let edge2 = v2 - v0; - let h = cross(r.direction, edge2); - let a = dot(edge1, h); - if a < EPSILON { - return None; - } - - let f = 1. / a; - let s = r.origin - v0; - let u = f * dot(s, h); - if u < 0. || u > 1. { - return None; - } - let q = cross(s, edge1); - let v = f * dot(r.direction, q); - if v < 0. || u + v > 1. { - return None; - } - // At this stage we can compute t to find out where the intersection point is on the line. - let t = f * dot(edge2, q); - // ray intersection - if t > EPSILON { - return Some(RayTriangleResult { - t, - p: r.origin + r.direction * t, - }); - } - // This means that there is a line intersection but not a ray intersection. - None -} -/// Based on https://www.scratchapixel.com/lessons/3d-basic-rendering/ray-tracing-rendering-a-triangle/ray-triangle-intersection-geometric-solution.html -fn ray_triangle_intersect_geometric(r: Ray, tri: &Triangle) -> Option { - let n = tri.normal; - - // close enough to parallel, won't hit - let n_dot_dir = dot(n, r.direction); - if n_dot_dir < EPSILON { - return None; - } - - let v0 = tri.verts[0]; - let v1 = tri.verts[1]; - let v2 = tri.verts[2]; - let d = -dot(n, v0); - let t = -(dot(n, r.origin) + d) / n_dot_dir; - // check if the triangle is behind the ray - if t < 0. { - return None; - } - - let p = r.origin + t * r.direction; - - let edge0 = v1 - v0; - let edge1 = v2 - v1; - let edge2 = v0 - v2; - let vp0 = p - v0; - let c = cross(edge0, vp0); - if dot(n, c) < 0. { - return None; - } - - let vp1 = p - v1; - let c = cross(edge1, vp1); - if dot(n, c) < 0. { - return None; - } - - let vp2 = p - v2; - let c = cross(edge2, vp2); - if dot(n, c) < 0. { - return None; - } - Some(RayTriangleResult { t, p }) -} - impl Hit for Triangles where M: Material, @@ -222,8 +140,7 @@ where fn hit(&self, r: Ray, _t_min: f32, _t_max: f32) -> Option { // TODO(wathiede): add an acceleration structure to more cheaply skip some triangles. for tri in &self.triangles { - if let Some(RayTriangleResult { t, p }) = - ray_triangle_intersect_moller_trumbore1(r, tri) + if let Some(RayTriangleResult { t, p }) = ray_triangle_intersect_moller_trumbore(r, tri) { //if let Some(RayTriangleResult { t, p }) = ray_triangle_intersect_geometric(r, tri) { // We don't support UV (yet?).