summaryrefslogtreecommitdiff
path: root/shadeop.c
diff options
context:
space:
mode:
Diffstat (limited to 'shadeop.c')
-rw-r--r--shadeop.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/shadeop.c b/shadeop.c
index c6080e3..4b74256 100644
--- a/shadeop.c
+++ b/shadeop.c
@@ -30,3 +30,21 @@ smoothstep(double edge0, double edge1, double n)
t = fclamp((n-edge0)/(edge1-edge0), 0, 1);
return t*t * (3 - 2*t);
}
+
+/* TODO apply attenuation for punctual lights */
+Color
+getlightcolor(LightSource *l, Point3 dir)
+{
+ double cθs, cθu, cθp, t;
+
+ /* see “Spotlights”, Real-Time Rendering 4th ed. § 5.2.2 */
+ if(l->type == LIGHT_SPOT){
+ cθs = dotvec3(mulpt3(dir, -1), l->dir);
+ cθu = cos(l->θu);
+ cθp = cos(l->θp);
+// return mulpt3(l->c, smoothstep(cθu, cθp, cθs));
+ t = fclamp((cθs - cθu)/(cθp - cθu), 0, 1);
+ return mulpt3(l->c, t*t);
+ }
+ return l->c;
+}