From dbe5f54957ddc13549a6ce822da95170aa09a0c6 Mon Sep 17 00:00:00 2001 From: Julian T Date: Mon, 8 Feb 2021 14:32:11 +0100 Subject: Rename to pathtrace, started for of depth of field, choose closest intersect --- src/scene/scene.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/scene/scene.rs') diff --git a/src/scene/scene.rs b/src/scene/scene.rs index 8575217..83a43c7 100644 --- a/src/scene/scene.rs +++ b/src/scene/scene.rs @@ -7,6 +7,11 @@ pub struct Scene { objs: Vec, } +pub struct SceneIntersect<'a> { + pub mat: &'a dyn Material, + pub i: Intersection, +} + impl Scene { pub fn new() -> Self { Self { @@ -24,14 +29,19 @@ impl Scene { } } - pub fn intersect(&self, ray: &Ray) -> Option<(&dyn Material, Intersection)> { + pub fn intersect(&self, ray: &Ray) -> Option { + let mut min: Option = None; + for obj in self.objs.iter() { if let Some(i) = obj.shape.intersect(&ray) { - return Some((obj.mat.as_ref(), i)) + match min { + Some(ref si) if si.i.t < i.t => (), + _ => min = Some(SceneIntersect {i, mat: obj.mat.as_ref() }), + } } } - None + min } } -- cgit v1.2.3