From 4f6071952317dc48b5a8e0e3360ee5da40886339 Mon Sep 17 00:00:00 2001 From: Matthew Gordon Date: Tue, 12 Nov 2019 17:25:10 -0500 Subject: [PATCH] Correctly render multiple objects instead of just rendeing one --- src/camera.rs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/camera.rs b/src/camera.rs index f0e368f..082cc91 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -68,13 +68,21 @@ pub fn render_scene(output_image: &mut OutputImage, scene: &Scene< for column in 0..output_image.get_width() { for row in 0..output_image.get_height() { let ray = image_sampler.ray_for_pixel(row, column); - for object in scene.objects.iter() { - let gray = match object.intersect(&ray) { - None => 0, - Some(_) => 255, - }; - output_image.set_color(row, column, gray, gray, gray); - } + let hit = scene + .objects + .iter() + .flat_map(|object| object.intersect(&ray)) + .min_by( + |a, b| match PartialOrd::partial_cmp(&a.distance, &b.distance) { + None => std::cmp::Ordering::Less, + Some(ordering) => ordering, + }, + ); + let gray = match hit { + None => 0, + Some(_) => 255, + }; + output_image.set_color(row, column, gray, gray, gray); } } }