use crate::{ objects::{hit::Hit, materials::traits::Material}, ray::Ray, vec3::Colour, }; pub struct Dielectric { refraction_index: f32, } impl Dielectric { pub fn new(refraction_index: f32) -> Self { Self { refraction_index: refraction_index, } } } impl Material for Dielectric { fn scatter(&self, hit: &Hit, ray: &Ray) -> Option<(Ray, Colour)> { let ri = if hit.front_face() { 1. / self.refraction_index } else { self.refraction_index }; let unit = ray.dir().get_unit(); let refr = unit.refract(hit.n(), ri); Some((Ray::new(*hit.p(), refr), Colour::new(1., 1., 1.))) } }