ft: 6.5: hitlist
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user