diff options
Diffstat (limited to 'src/material/lambertian.rs')
-rw-r--r-- | src/material/lambertian.rs | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/material/lambertian.rs b/src/material/lambertian.rs index 95f698e..fed26f9 100644 --- a/src/material/lambertian.rs +++ b/src/material/lambertian.rs @@ -1,10 +1,10 @@ use std::sync::Arc; use super::Material; -use crate::{hittable::HitRecord, texture::Texture, vec3::Vec3}; -use crate::vec3::Color; -use crate::texture::SolidColor; use crate::ray::Ray; +use crate::texture::SolidColor; +use crate::vec3::Color; +use crate::{hittable::HitRecord, texture::Texture, vec3::Vec3}; pub struct Lambertian { pub albedo: Arc<dyn Texture>, @@ -13,13 +13,21 @@ pub struct Lambertian { impl Lambertian { pub fn from_color(color: Color) -> Self { Self { - albedo: Arc::new(SolidColor { color_value: color.clone() }), + albedo: Arc::new(SolidColor { + color_value: color.clone(), + }), } } } impl Material for Lambertian { - fn scatter(&self, ray_in : &Ray, hit_record: &HitRecord, attenuation: &mut Color, scattered: &mut Ray) -> bool { + fn scatter( + &self, + ray_in: &Ray, + hit_record: &HitRecord, + attenuation: &mut Color, + scattered: &mut Ray, + ) -> bool { let mut scatter_direction = &hit_record.normal + Vec3::random_unit_vector(); // Catch zero-vector scatter directions that will generate issues later @@ -27,7 +35,11 @@ impl Material for Lambertian { scatter_direction = hit_record.normal.clone(); } - *scattered = Ray { origin: hit_record.p.clone(), direction: scatter_direction, time: ray_in.time }; + *scattered = Ray { + origin: hit_record.p.clone(), + direction: scatter_direction, + time: ray_in.time, + }; *attenuation = self.albedo.value(hit_record.u, hit_record.v, &hit_record.p); true } |