/* * Polka-dot shader */ #define square(x) (x)*(x) surface lab7 ( float Ka = 0.5, Kd = 0.75, Ks = 0.25; color backcolor = color "rgb" (1, 0, 0); /* default red */ color dotcolor = color "rgb" (1,1,1); /* default white */ float dotradius = 0.05; float dotspacing = 0.1; float roughness = 0.1; color specularcolor = 1; ) { normal Nf; color surfacecolor; float tt, ss, centerX, centerY; tt = mod(t, (2*dotradius + dotspacing)); ss = mod(s, (2*dotradius + dotspacing)); centerX = dotspacing + dotradius; centerY = dotspacing + dotradius; if ((square(tt - centerX) + square(ss - centerY)) <= square(dotradius)) { surfacecolor = dotcolor; } else { surfacecolor = backcolor; } Nf = faceforward (normalize(N),I); Oi = Os; Ci = Os * ( surfacecolor * (Ka*ambient() + Kd*diffuse(Nf)) + specularcolor * Ks*specular(Nf,-normalize(I),roughness)); }