From 6df2d857d402e8809f7d9d37e5e3c4e56ccd0bef Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Tue, 24 Mar 2020 21:37:00 +0100 Subject: [PATCH] library: use beevee's Intersected trait --- pathtracer/src/render/object.rs | 12 +++++++++++- pathtracer/src/render/scene.rs | 4 +--- pathtracer/src/shape/mod.rs | 7 +++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/pathtracer/src/render/object.rs b/pathtracer/src/render/object.rs index 1e9154e..d7b4399 100644 --- a/pathtracer/src/render/object.rs +++ b/pathtracer/src/render/object.rs @@ -4,7 +4,11 @@ use crate::material::MaterialEnum; use crate::shape::{Shape, ShapeEnum}; use crate::texture::TextureEnum; use crate::Point; -use beevee::aabb::{Bounded, AABB}; +use beevee::{ + aabb::{Bounded, AABB}, + bvh::Intersected, + ray::Ray, +}; use serde::Deserialize; /// An object being rendered in the scene. @@ -66,6 +70,12 @@ impl Bounded for Object { } } +impl Intersected for Object { + fn intersect(&self, ray: &Ray) -> Option { + self.shape.intersect(ray) + } +} + #[cfg(test)] mod test { use super::*; diff --git a/pathtracer/src/render/scene.rs b/pathtracer/src/render/scene.rs index b694b16..2952ffa 100644 --- a/pathtracer/src/render/scene.rs +++ b/pathtracer/src/render/scene.rs @@ -149,9 +149,7 @@ impl Scene { } fn cast_ray(&self, ray: Ray) -> Option<(f32, &Object)> { - self.bvh - .walk(&ray, &self.objects) - .and_then(|o| o.shape.intersect(&ray).map(|t| (t, o))) + self.bvh.walk(&ray, &self.objects) } fn color_at( diff --git a/pathtracer/src/shape/mod.rs b/pathtracer/src/shape/mod.rs index 387da0c..e68a59a 100644 --- a/pathtracer/src/shape/mod.rs +++ b/pathtracer/src/shape/mod.rs @@ -3,6 +3,7 @@ use super::{Point, Point2D, Vector}; use beevee::{ aabb::{Bounded, AABB}, + bvh::Intersected, ray::Ray, }; use nalgebra::Unit; @@ -44,6 +45,12 @@ impl Bounded for dyn Shape { } } +impl Intersected for dyn Shape { + fn intersect(&self, ray: &Ray) -> Option { + self.intersect(ray) + } +} + mod sphere; pub use sphere::*;