diff options
Diffstat (limited to 'shadeop.c')
-rw-r--r-- | shadeop.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -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; +} |