aboutsummaryrefslogtreecommitdiff
path: root/src/scene/scene.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/scene/scene.rs')
-rw-r--r--src/scene/scene.rs28
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))
}
}