ft (wip): 10: dielectrics

This commit is contained in:
2026-04-16 15:38:01 +02:00
parent b756cc394a
commit 1920376e34
6 changed files with 71 additions and 7 deletions

View File

@@ -0,0 +1,30 @@
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.)))
}
}