Bill Thiede d9d183b1e5
Some checks failed
continuous-integration/drone/push Build is failing
rtiow: break project into multiple workspaces.
2019-11-09 11:56:33 -08:00

29 lines
703 B
Rust

use std::sync::Arc;
use crate::aabb::AABB;
use crate::material::Material;
use crate::ray::Ray;
use crate::vec3::Vec3;
pub struct HitRecord<'m> {
pub t: f32,
pub uv: (f32, f32),
pub p: Vec3,
pub normal: Vec3,
pub material: &'m dyn Material,
}
pub trait Hit: Send + Sync {
fn hit(&self, r: Ray, t_min: f32, t_max: f32) -> Option<HitRecord>;
fn bounding_box(&self, t_min: f32, t_max: f32) -> Option<AABB>;
}
impl Hit for Arc<dyn Hit> {
fn hit(&self, r: Ray, t_min: f32, t_max: f32) -> Option<HitRecord> {
(**self).hit(r, t_min, t_max)
}
fn bounding_box(&self, t_min: f32, t_max: f32) -> Option<AABB> {
(**self).bounding_box(t_min, t_max)
}
}