// Last edited on 2010-12-16 00:40:07 by stolfilocal
// Processed by remove-cam-lights

#include "textures.inc"

background{ color rgb < 0.15, 0.40, 0.95 > }

#declare tx_verde =
  texture{
    pigment{ color rgb < 0.10, 0.90, 0.10 > }
  }

#declare tx_azul =
  texture{
    pigment{ color rgb < 0.15, 0.30, 1.00 > }
  }

#declare tx_2 =
  texture{
    pigment{ color rgb < 0.85, 0.90, 0.30 > }
  }

#declare tx_3 =
  texture{
    pigment{ color rgb < 0.85, 0.60, 0.30 > }
  }

#declare chao =
  box{ <-50,-50,-10>, <+20,+20,0> }

#declare cilindro =
  cylinder { <0,0,0> <0,0,1> 0.1 texture { tx_3 } }

#macro chassis(alfa, beta, gama)
  union {
    box { <-1,-1,0>, <1,1,0.2> texture { tx_2 } }
    object { pernaA(beta, gama) translate <0,-0.5,-1> rotate alfa*y }
    object { pernaA(beta, gama) translate <0,0.5,-1> rotate alfa*y }
  }
#end

#macro pernaA(beta, gama)
  union {
    object { cilindro }
    sphere { <0,0,0> 0.1 texture {tx_3} }
    object { pernaB(gama) translate <0,0,-1> rotate beta*y }
  }
#end

#macro pernaB(gama)
  union {
    object { cilindro }
    object { pe() rotate gama*y }
  }
#end

#macro pe()
  cone { <0,0,0> 0.3 <1,0,0> 0 texture { tx_3 } }
#end

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

#declare alfa0 = 0; #declare alfa1 = -30; #declare alfa2 = 0; #declare alfa3 = -30; #declare alfa4 = 0;
#declare beta0 = 0; #declare beta1 = 90; #declare beta2 = 0; #declare beta3 = 45; #declare beta4 = 0;
#declare gama0 = 90; #declare gama1 = 90; #declare gama2 = 90; #declare gama3 = 30; #declare gama4 = 90;

#declare t0 = 0.000;
#declare t1 = 0.250;
#declare t2 = 0.500;
#declare t3 = 0.750;
#declare t4 = 1.000;

#include "eixos.inc"

#macro armacao(fase)

  #local fase0 = 0.00;
  #local fase1 = 0.50;
  #local fase2 = 1.00;

  #if ((fase >= fase0) & (fase <= fase1))
    #declare alfa = interpola(fase0, alfa0, fase1, alfa1, fase);
    #declare beta = interpola(fase0, beta0, fase1, beta1, fase);
    #declare gama = interpola(fase0, gama0, fase1, gama1, fase);
  #end
  #if ((fase > fase1) & (fase <= fase2))
    #declare alfa = interpola(fase1, alfa1, fase2, alfa2, fase);
    #declare beta = interpola(fase1, beta1, fase2, beta2, fase);
    #declare gama = interpola(fase1, gama1, fase2, gama2, fase);
  #end

        object { chassis(alfa, beta, gama) }
#end

#macro voo(h, fase)

  #local fase0 = 0.00;
  #local fase1 = 0.50;
  #local fase2 = 1.00;

  #if ((fase >= fase0) & (fase <= fase1))
    #declare alfa = interpola(fase0, alfa2, fase1, alfa3, fase);
    #declare beta = interpola(fase0, beta2, fase1, beta3, fase);
    #declare gama = interpola(fase0, gama2, fase1, gama3, fase);
  #end
  #if ((fase > fase1) & (fase <= fase2))
    #declare alfa = interpola(fase1, alfa3, fase2, alfa4, fase);
    #declare beta = interpola(fase1, beta3, fase2, beta4, fase);
    #declare gama = interpola(fase1, gama3, fase2, gama4, fase);
  #end

        object { chassis(alfa, beta, gama) translate <0,0, sin(fase* (pi))*h> }
#end

#macro voo_geral(h, p, q, fase)
  #local r = interpola(0, p, 1, q, fase);
  object {voo(h, fase) translate r}
#end

#macro armacao_geral(p, fase)
   object {armacao(fase) translate p}
#end

#macro quadro(tt)
  #local t0 = 0.0000;
  #local t1 = 0.1500;
  #local t2 = 0.5000;
  #local t3 = 0.6500;
  #local t4 = 1.0000;

  #local A = < 0, 0, 0>;
  #local B = < 0, 3, 1>;
  #local C = < 0, 6, 0>;

  #local hAB = 0; //0.5
  #local hBC = 0; //-0.5

  #if ((tt >= t0) & (tt <= t1))
    #local fase = interpola(t0, 0, t1, 1, tt);
    object {armacao_geral(A, fase)}
  #end

  #if ((tt > t1) & (tt <= t2))
    #local fase = interpola(t1, 0, t2, 1, tt);
    object {voo_geral(hAB, A, B, fase)}
  #end

  #if ((tt > t2) & (tt <= t3))
    #local fase = interpola(t2, 0, t3, 1, tt);
    object {armacao_geral(B, fase)}
  #end

  #if ((tt > t3) & (tt <= t4))
    #local fase = interpola(t3, 0, t4, 1, tt);
    object {voo_geral(hBC, B, C, fase)}
  #end
#end

union{
  object{ eixos(3.00) }

  object{ chao  translate < 0,0,-5 > texture{ tx_verde } }

  object { quadro (clock)}

  scale 2
}

#include "camlight.inc"
#declare centro_cena = interpola(0, < 0.00, 0.00, 1.00 >, 1, < 0.00, 6.00, 1.00 >, clock);
#declare raio_cena = 10.0;
#declare dir_camera = < 15.00, 16.00, 2.00 >;
#declare dist_camera = 32.0;
#declare intens_luz = 1.25;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)