diff --git a/src/objects/materials/dielectric.rs b/src/objects/materials/dielectric.rs index 441b252..0773860 100644 --- a/src/objects/materials/dielectric.rs +++ b/src/objects/materials/dielectric.rs @@ -24,7 +24,7 @@ impl Material for Dielectric { self.refraction_index }; let unit = ray.dir().get_unit(); - let refr = unit.refract(hit.n(), ri); + let refr = unit.refract(&hit.n().get_unit(), ri); Some((Ray::new(*hit.p(), refr), Colour::new(1., 1., 1.))) } } diff --git a/src/objects/sphere.rs b/src/objects/sphere.rs index 1a64a09..ae985e6 100644 --- a/src/objects/sphere.rs +++ b/src/objects/sphere.rs @@ -42,7 +42,9 @@ impl Hittable for Sphere { if d < 0. { None } else { - let t = (h - sqrt(d)) / a; + let tl = (h - sqrt(d)) / a; + let tr = (h + sqrt(d)) / a; + let t = if tl > 0.001 { tl } else { tr }; let p = r.at(t); let out_n = (p - self.center) / self.radius; Some(Hit::new( diff --git a/src/vec3.rs b/src/vec3.rs index 0e35b8b..e70b723 100644 --- a/src/vec3.rs +++ b/src/vec3.rs @@ -102,7 +102,7 @@ impl Vec3 { } pub fn reflect(&self, n: &Self) -> Self { - *self - 2. * self.dot(n) * n + *self - 2. * (self.dot(n) * n) } pub fn refract(&self, n: &Self, etai_over_etat: f32) -> Self {