Skip to content

Instantly share code, notes, and snippets.

@djg
Created September 14, 2018 02:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save djg/d8e984d9c55fff3b38fdf5111abd0196 to your computer and use it in GitHub Desktop.
Save djg/d8e984d9c55fff3b38fdf5111abd0196 to your computer and use it in GitHub Desktop.
functional programming cry for help
pub fn hit_zip(aabb: &Aabb, r: &Ray, t_min: f32, t_max: f32) -> bool {
r.direction
.iter()
.zip(
r.point
.iter()
.zip(aabb.min.iter().zip(aabb.max.iter())),
).all(|(d, (p, (min, max)))| {
let inv_d = 1. / d;
let t0 = (min - p) * inv_d;
let t1 = (max - p) * inv_d;
let (t0, t1) = if inv_d < 0. { (t1, t0) } else { (t0, t1) };
let t_min = if t0 > t_min { t0 } else { t_min };
let t_max = if t1 < t_max { t1 } else { t_max };
t_min < t_max
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment