From c3d6d80fd757bcaba266f773c75b49f7e03932bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20R=C3=B6ger?= Date: Wed, 20 Nov 2024 13:41:18 +0100 Subject: [PATCH] fix(scene): respect t for shadow rays --- src/raytracer/scene.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/raytracer/scene.rs b/src/raytracer/scene.rs index 1c4a79b..e9e8c84 100644 --- a/src/raytracer/scene.rs +++ b/src/raytracer/scene.rs @@ -94,15 +94,18 @@ impl Scene { for light in &self.lights { // Cast Shadow-Ray + let direction = light.position - isect_pt; + let distance = direction.norm(); + let direction = direction / distance; let shadow_ray = Ray { origin: isect_pt, - direction: (light.position - isect_pt).normalize(), + direction, }; - if self - .objects - .iter() - .any(|obj| obj.intersect(&shadow_ray).is_some()) - { + if self.objects.iter().any(|obj| { + obj.intersect(&shadow_ray) + .and_then(|(_, _, t, _)| Some(t < distance)) + .unwrap_or(false) + }) { continue; }