#include "proctext.h" surface star( uniform float Ka = 1; uniform float Kd = 1; uniform color starcolor = color (1.0000,0.5161,0.0000); uniform float npoints = 5; uniform float sctr = 0.5; uniform float tctr = 0.5; ) { point Nf = normalize(faceforward(N, I)); color Ct; float ss, tt, angle, r, a, in_out; uniform float rmin = 0.07, rmax = 0.2; uniform float starangle = 2*PI/npoints; uniform point p0 = rmax*(cos(0),sin(0),0); uniform point p1 = rmin* (cos(starangle/2),sin(starangle/2),0); uniform point d0 = p1 - p0; point d1; ss = s - sctr; tt = t - tctr; angle = atan(ss, tt) + PI; r = sqrt(ss*ss + tt*tt); a = mod(angle, starangle)/starangle; if (a >= 0.5) a = 1 - a; d1 = r*(cos(a), sin(a),0) - p0; in_out = step(0, zcomp(d0^d1)); Ct = mix(Cs, starcolor, in_out); /* diffuse ("matte") shading model */ Oi = Os; Ci = Os * Ct * (Ka * ambient() + Kd * diffuse(Nf)); }