/*
 * 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));
}