diff options
Diffstat (limited to 'src/scene/scene.rs')
-rw-r--r-- | src/scene/scene.rs | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/scene/scene.rs b/src/scene/scene.rs index 367003e..0ffbe97 100644 --- a/src/scene/scene.rs +++ b/src/scene/scene.rs @@ -1,33 +1,33 @@ -use super::{Intersection, Hittable}; -use crate::core::Ray; +use crate::core::{Ray, Intersection, Hittable}; +use crate::material::Material; -type Shape = Box<dyn Hittable>; +use super::Object; pub struct Scene { - shps: Vec<Shape>, + objs: Vec<Object>, } impl Scene { pub fn new() -> Self { Self { - shps: Vec::new(), + objs: Vec::new(), } } - pub fn add_shape(&mut self, shp: Shape) { - self.shps.push(shp); + pub fn add_object(&mut self, obj: Object) { + self.objs.push(obj); } - pub fn add_shapes(&mut self, shps: Vec<Shape>) { - for shp in shps { - self.add_shape(shp); + pub fn add_objects(&mut self, objs: Vec<Object>) { + for obj in objs { + self.add_object(obj); } } - pub fn intersect(&self, ray: &Ray) -> Option<Intersection> { - for shp in self.shps.iter() { - if let Some(i) = shp.intersect(&ray) { - return Some(i) + pub fn intersect(&self, ray: &Ray) -> Option<(&dyn Material, Intersection)> { + for obj in self.objs.iter() { + if let Some(i) = obj.shape.intersect(&ray) { + return Some((obj.mat.as_ref(), i)) } } |