diff options
| author | ladevieq <ladevie.quentin@gmail.com> | 2021-01-09 20:42:24 +0100 |
|---|---|---|
| committer | ladevieq <ladevie.quentin@gmail.com> | 2021-01-09 20:43:09 +0100 |
| commit | 2db0d27e7f1744443958717c19b732eed57455f2 (patch) | |
| tree | 839b8ea513c8c239f015071ab083bd50f03854a5 /src/dielectric.cpp | |
| parent | 4379b46b46563c5a709df8d567ef75affc3fd31c (diff) | |
Replace old classes with compute shader structs
Diffstat (limited to 'src/dielectric.cpp')
| -rw-r--r-- | src/dielectric.cpp | 32 |
1 files changed, 0 insertions, 32 deletions
diff --git a/src/dielectric.cpp b/src/dielectric.cpp deleted file mode 100644 index 80ca069..0000000 --- a/src/dielectric.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "dielectric.hpp" -#include "rt.hpp" -#include "hittable.hpp" - -dielectric::dielectric(double index_of_refraction) - : ior(index_of_refraction) {} - -bool dielectric::scatter(const ray& r, const struct hit_info& info, color& attenuation, ray& scattered) const { - auto unit_direction = r.direction.unit(); - auto refraction_ratio = info.front_face ? (1.0 / ior) : ior; - double cos_theta = fmin(info.normal.dot(-unit_direction), 1.0); - double sin_theta = sqrt(1.0 - cos_theta * cos_theta); - - vec3 direction; - if (refraction_ratio * sin_theta > 1.0 || reflectance(cos_theta, refraction_ratio) > randd()) { - direction = reflect(unit_direction, info.normal); - } else { - direction = refract(unit_direction, info.normal, refraction_ratio); - } - - scattered = ray { info.point, direction }; - attenuation = { 1.0, 1.0, 1.0 }; - - return true; -} - -double dielectric::reflectance(double cosine, double ref_idx) { - // Use Schlick's approximation for reflectance. - auto r0 = (1 - ref_idx) / (1 + ref_idx); - r0 = r0 * r0; - return r0 + (1 - r0) * pow ((1 - cosine), 5); -} |
