ft (wip): 10: dielectrics
This commit is contained in:
30
src/objects/materials/dielectric.rs
Normal file
30
src/objects/materials/dielectric.rs
Normal 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.)))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user