ft: 6.5: hitlist

This commit is contained in:
2026-04-15 13:57:43 +02:00
parent 3a660f900a
commit 583b67f4f4
5 changed files with 23 additions and 26 deletions

View File

@@ -1,4 +1,4 @@
use crate::vec3::Vec3;
use crate::{objects::traits::Hittable, ray::Ray, vec3::Vec3};
pub struct Hit {
t: f32,
@@ -22,4 +22,17 @@ impl Hit {
pub fn n(&self) -> &Vec3 {
&self.n
}
pub fn hit_list<T: Hittable>(hittables: &Vec<T>, r: &Ray) -> Option<Hit> {
let mut closest: Option<Hit> = None;
for hittable in hittables {
if let Some(hit) = hittable.hit(r) {
// hit happens in front of camera and is closer than closest
if *hit.t() > 0. && (closest.is_none() || closest.as_ref().unwrap().t() > hit.t()) {
closest = Some(hit);
}
}
}
return closest;
}
}