// Last edited on DATE TIME by USER
// Processed by remove-cam-lights

#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 1.00 >;
#declare raio_cena = 6.0;
#declare dir_camera = < 14.00, 0, 4.00 >;
#declare dist_camera = 16.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)

#declare tx_xadrez =
  texture{
    pigment{ checker color rgb < 0.10, 0.32, 0.60 >, color rgb < 1.00, 0.97, 0.90 > }
    finish{ diffuse 0.9 ambient 0.1 }
    scale 2.0
  }

background{ color rgb < 0.75, 0.80, 0.85 > }

#declare raio = 2.000;

#macro interpole (ta, va, tb, vb, var)
  #local s = (var-ta)/(tb-ta);
  ((1-s)*va + s*vb)
#end

#macro corpo (teta, alfa, gama)
union {
  box {
    < +1, 1, 0.3 >,
    < -1, -1, 0 >
  }
object {perna ( alfa, gama) rotate teta*x translate <1,1,-0.25>}
object {perna ( alfa, gama) rotate teta*x translate <1,-1,-0.25>}
object {perna ( alfa, gama) rotate teta*x translate <-1,-1,-0.25>}
object {perna (alfa, gama) rotate teta*x translate <-1,1,-0.25>}
}
#end

#macro perna ( alfa, gama)
union {
  sphere {
      < 0.00, 0.00, 0.0 >, 0.3
    }
    cylinder {
    < 0, 0, 0 >,
    < 0, 0, -1 >,
    0.2
  }
  object{ anteperna ( gama)  rotate alfa*x translate <0,0,-1>}
}
#end

#macro anteperna (gama)
union {
   sphere {
      < 0.00, 0.00, 0.0 >, 0.3
    }
   cylinder {
     < 0, 0, 0 >,
    < 0, 0, -1 >,
    0.2
  }
  object{ pe ()  rotate gama*x translate <0,0,-1>}
}
#end

#macro pe ()
union {
   sphere {
      < 0.00, 0.00, 0.2 >, 0.3
    }
    cylinder {
     < 0, 0.5, 0.0 >,
    < 0, -0.5, 0.0 >,
    0.2
  }
}
#end

#macro plataforma (disty, z1, z2)
union {
   box {
      < 1.50, 1.50, z1>,
      < -1.50, -1.50, z2 >
    }
    translate <0,disty,0>
}
#end

#macro armacaogeral (fase, ponto, altura)
#declare fase0 = 0.00; #declare teta0 = 0.00;  #declare alfa0 = 0.00; #declare gama0 = 0.00; #declare h0 = 0;
#declare fase1 = 0.5; #declare teta1 = 45.0;  #declare alfa1 = -90.0; #declare gama1 = 45.0; #declare h1 = -1;
#declare fase2 = 1; #declare teta2 = 0.00;  #declare alfa2 = 0.00; #declare gama2 = 0.0; #declare h2 = 0;
    #if ((fase >= fase0) & (fase <= fase1))
      #declare teta  = interpole(fase0, teta0, fase1, teta1, fase);
      #declare alfa  = interpole(fase0, alfa0, fase1, alfa1, fase);
      #declare gama  = interpole(fase0, gama0, fase1, gama1, fase);
      #declare h  = interpole(fase0, h0, fase1, h1, fase);
    #end
    #if ((fase >= fase1) & (fase <= fase2))
      #declare teta  = interpole(fase1, teta1, fase2, teta2, fase);
      #declare alfa  = interpole(fase1, alfa1, fase2, alfa2, fase);
      #declare gama  = interpole(fase1, gama1, fase2, gama2, fase);
      #declare h  = interpole(fase1, h1, fase2, h2, fase);
    #end

      corpo(teta, alfa, gama )
      texture { tinta_A }

      translate ponto
#end

#macro voogeral (fase, p, q, z1,z2,z3)
#declare fase2 = 0.00; #declare h2 = z1;
#declare fase3 = 0.5; #declare h3 = z2;
#declare fase4 = 1; #declare h4 = z3;
  #if ((fase >= fase2) & (fase <= fase3))
      #declare h  = interpole(fase2, h2, fase3, h3, fase);
    #end
    #if ((fase >= fase3) & (fase <= fase4))
      #declare h  = interpole(fase3, h3, fase4, h4, fase);
    #end

      corpo(0, 0, 0 )

      #declare d  = interpole(0, p, 1, q, fase);

      texture { tinta_A }

      translate d

#end

#macro quadro(tt)

#declare tinta_A =
  texture {
    pigment { color rgb < 0.55 + 0.45, 0.80, 0.55 - 0.5 > }
    finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 }
  }

#declare t0 = 0.000;
#declare t1 = 0.150;
#declare t2 = 0.5;
#declare t3 = 0.65;
#declare t4 = 1.000;

#include "eixos.inc"

union {
#declare A = <0,-6,0>;
#declare B = <0,0,3.2>;
#declare C = <0,0,+6>;

  #if ((tt >= t0) & (tt <= t1))
    #local fase = interpole(0,t0,1,t1,tt);
    object{armacaogeral(fase, A, 0)}
  #end
  #if ((tt >= t1) & (tt <= t2))
  #local fase = interpole(0,t1,1,t2,tt);
   object {voogeral(fase, A, B, 0,5,3.2)}
  #end
  #if ((tt >= t2) & (tt <= t3))
    #local fase = interpole(0,t2,1,t3,tt);
    object{armacaogeral(fase, 0, 3.2)}
  #end
  #if ((tt >= t3) & (tt <= t4))
  #local fase = interpole(0,t3,1,t4,tt);
   object {voogeral(fase, B,C , 3.2,6,0)}
  #end

}
union {
     object{ eixos(3.00) }

      plataforma(-6, -2.2, -4.2)
      plataforma(0,0, -4.2)
      plataforma(+6, -2.2, -4.2)
    texture{ tx_xadrez }
}
#end

quadro(clock)