aboutsummaryrefslogtreecommitdiffstats
path: root/src/lambertian.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lambertian.cpp')
-rw-r--r--src/lambertian.cpp18
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;
+}