diff options
Diffstat (limited to 'src/lambertian.cpp')
| -rw-r--r-- | src/lambertian.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/lambertian.cpp b/src/lambertian.cpp new file mode 100644 index 0000000..16ab146 --- /dev/null +++ b/src/lambertian.cpp @@ -0,0 +1,18 @@ +#include "lambertian.hpp" +#include "hittable.hpp" + +lambertian::lambertian(const color& albedo) : albedo(albedo) {} + +bool lambertian::scatter(const ray& r, const struct hit_info& info, color& attenuation, ray& scattered) const { + // auto scatter_direction = info.normal + random_in_unit_sphere(); + // auto scatter_direction = info.normal + random_unit_vector(); + auto scatter_direction = info.normal + random_in_hemisphere(info.normal); + + if (scatter_direction.near_zero()) { + scatter_direction = info.normal; + } + + scattered = ray { info.point, scatter_direction }; + attenuation = albedo; + return true; +} |
