From 33e747fa1c0957546c10e4d7b490ac7fbb0fd2d2 Mon Sep 17 00:00:00 2001 From: Julian T Date: Sun, 7 Feb 2021 14:25:06 +0100 Subject: Abstracted lambertian into material --- src/scene/scene.rs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'src/scene/scene.rs') 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; +use super::Object; pub struct Scene { - shps: Vec, + objs: Vec, } 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) { - for shp in shps { - self.add_shape(shp); + pub fn add_objects(&mut self, objs: Vec) { + for obj in objs { + self.add_object(obj); } } - pub fn intersect(&self, ray: &Ray) -> Option { - 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)) } } -- cgit v1.2.3