Files
raytracing/src/objects/materials/dielectric.rs
2026-04-16 15:38:01 +02:00

31 lines
708 B
Rust

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.)))
}
}