// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2003-05-29 00:05:17 by stolfi
// Last edited on 2003-03-18 18:00:00 by evandro

#include "colors.inc"

background{White}

camera {
  location 0.95*<0,2,10> 
  right x  up y
  look_at <0,0,0>
}

light_source {  10*<-5, 15, 5> color 0.6*White }
light_source { 100*<-5, 4, 10> color 1.2*White }
light_source { 100*< 5, 5, 10> color 0.8*White }

plane { y,-3.4 pigment { checker color rgb < 1, 0.8, 0.6 > color rgb < 0.6, 0.8, 1.0 > }}

#if (clock < 0.25)
  #declare angulo_tornozelo_esquerdo = 200 * clock;
  #declare angulo_tornozelo_direito  = 0;
  #declare angulo_joelho_esquerdo    = -100 * clock;
  #declare angulo_joelho_direito     = 0;
  #declare angulo_quadril_esquerdo   = 50 * clock;
  #declare angulo_quadril_direito    = 0;
#else
  #if (clock < 0.50)
    #declare angulo_tornozelo_esquerdo = 50 - ( 200 * (clock - 0.25));
    #declare angulo_tornozelo_direito  = 0;
    #declare angulo_joelho_esquerdo    = -25 + ( 100 * (clock - 0.25));
    #declare angulo_joelho_direito     = 0;
    #declare angulo_quadril_esquerdo   = 12.5 - ( 50 * (clock - 0.25));
    #declare angulo_quadril_direito    = 0;
  #else
    #if (clock < 0.75)
      #declare angulo_tornozelo_esquerdo = 0;
      #declare angulo_tornozelo_direito  = 200 * (clock - 0.50);
      #declare angulo_joelho_esquerdo    = 0;
      #declare angulo_joelho_direito     = -100 * (clock - 0.50);
      #declare angulo_quadril_esquerdo   = 0;
      #declare angulo_quadril_direito    = 50 * (clock - 0.50);
    #else
      #declare angulo_tornozelo_esquerdo = 0;
      #declare angulo_tornozelo_direito  = 50 - ( 200 * (clock - 0.75));
      #declare angulo_joelho_esquerdo    = 0;
      #declare angulo_joelho_direito     = -25 + ( 100 * (clock - 0.75));
      #declare angulo_quadril_esquerdo   = 0;
      #declare angulo_quadril_direito    = 12.5 - ( 50 * (clock - 0.75));
    #end
  #end
#end

#declare metade_cabeca_robo =
  union {
    sphere { <0, 1.5, 0>, 0.5 scale <1, 2, 1> pigment {Grey} normal {granite 1 scale 0.9} }
    sphere { <-0.2, 3.5, 0.4>, 0.1 pigment {Red} }
    sphere { <+0.2, 3.5, 0.4>, 0.1 pigment {Red} }
    difference {
      cylinder { <0, 3.25, 0>, <0, 2.75, 2>, 0.1 pigment {Green} }
      union {
        sphere { <-0.5, 2.7, 2>, 0.04 pigment {Black} }
        sphere { <+0.5, 2.7, 2>, 0.04 pigment {Black} }
      }
    }
  }

#declare boca_robo =
  sphere { <0, 2.5, 0.5>, 0.2 scale <2, 1, 1> pigment {White} }

#declare cabeca_robo =
  difference {
    object { metade_cabeca_robo }
    object { boca_robo }
}

#declare corpo_robo =
  difference {
    cylinder { <0, -1, 0>, <0, +2, 0>, 1 pigment {Grey} normal {granite 1 scale 0.9} }
    cylinder { <-1, 1, 0.15>, <+1, 1, 0.15>, 0.5 pigment {Blue} }
  }

#declare braco_robo =
  union {
    sphere { <-1.2, 1, 0>, .3 pigment {SkyBlue} }
    cylinder { <-4, 1, 0>, <-1.2, 1, 0>, 0.3 pigment {SkyBlue} normal {granite 1 scale 0.9} }
    cylinder { <-3.9, 1.35, 0>, <-3.9, 1.6, 0>, 0.1 pigment {SkyBlue} }
    cylinder { <-4.1, 0.8, 0>, <-4.4, 0.8, 0>, 0.05 pigment {SkyBlue} }
    cylinder { <-4.1, 1.0, 0>, <-4.4, 1.0, 0>, 0.05 pigment {SkyBlue} }
    cylinder { <-4.1, 1.2, 0>, <-4.4, 1.2, 0>, 0.05 pigment {SkyBlue} }
  }

#declare tornozelo_robo =
  sphere { <0, 0, 0>, 0.3 pigment {Green} normal {granite 1 scale 0.9} }

#declare pe_robo =
  box { <0.8, -0.15, 0.15>, <0.0, +0.15, -0.15> pigment {Green} normal {granite 1 scale 0.9} }

#declare canela_robo =
  cylinder { <0, 0, 0>, <0, 1, 0>, 0.3 pigment {SeaGreen} normal {granite 1 scale 0.9} }

#declare metade_perna_esquerda =
  union {
    object { canela_robo }
    object { tornozelo_robo }
    object { pe_robo rotate <0, 0, angulo_tornozelo_esquerdo> }
  }

#declare metade_perna_direita =
  union {
    object { canela_robo }
    object { tornozelo_robo }
    object { pe_robo rotate <0, 0, angulo_tornozelo_direito> }
  }

#declare joelho_robo =
  sphere { <0, 0, 0>, 0.45 pigment {Green} normal {granite 1 scale 0.9} }

#declare coxa_robo =
  cylinder { <0, 0, 0>, <-0.5, 2, 0>, 0.3 pigment {SeaGreen} normal {granite 1 scale 0.9} }

#declare perna_esquerda =
  union {
    object { coxa_robo }
    object { joelho_robo }
    object { metade_perna_esquerda translate <0, -1, 0> rotate <0, 0, angulo_joelho_esquerdo> }
  }

#declare perna_direita =
  union {
    object { coxa_robo }
    object { joelho_robo }
    object { metade_perna_direita translate <0, -1, 0> rotate <0, 0, angulo_joelho_direito> }
  }

#declare robo =
  union {
    object { cabeca_robo }
    object { corpo_robo }
    object { braco_robo scale <1, 1, 1> }
    object { braco_robo scale <-1, 1, 1> }
    object { perna_esquerda translate <0.5, -2, 0> rotate <0, 0, angulo_quadril_esquerdo> }
    object { perna_direita  translate <0.5, -2, 0> rotate <0, 0, angulo_quadril_direito> scale <-1,1,1> }
  }

union {
  object { robo }
}