// Last edited on 2003-12-09 02:40:24 by stolfi
// Exemplo de arquivo de descricao de cena para POV-ray

// ======================================================================

#declare ctr = < 0.00, 0.00, 1.00 >;
#declare camDir = vrotate(< -20.00, 18.00, 4.50 >, 40*clock*z);

camera {
  location   ctr + 1.25*camDir
  right      -1.00*x
  up         0.75*y
  sky        z
  look_at    ctr
}

// ======================================================================
// FONTES DE LUZ

light_source {
  100 * < -2.0, 1.0, 3.0 >              // Posição da lâmpada.
  color rgb 1.4 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

light_source {
  100 * < -2.0, -1.0, 3.0 >             // Posição da lâmpada.
  color rgb 0.6 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

#include "colors.inc"

// ======================================================================
// DESCRIÇÃO DA CENA 

background{ color rgb <0.20, 0.25, 0.30> }

plane{
  z, -6.6
  texture{ 
    pigment{ color rgb <0.7,0.6,0.5> }
    finish{ diffuse 0.7 ambient 0.3 }
  }
}

cylinder {
  -7*z, -6.5*z, 20
  texture{ 
    pigment{ radial
      frequency 9
      color_map{
        [ 0.0 color rgb <0.7,0.6,0.5> ]
        [ 0.5 color rgb <0.7,0.6,0.5> ]
        [ 0.5 color rgb <0.6,0.5,0.2> ]
        [ 1.0 color rgb <0.6,0.5,0.2> ]
      }
      rotate 90*x
    }
    finish{ diffuse 0.7 ambient 0.3 }
  }
}

#declare angulo = 0;
#declare angulo_final = 359;
#declare angulo_passo = 20;

#declare a1a = 15;
#declare a1b = 35;
#declare a2a = 65;
#declare a2b = 85;
#declare a3a = 45;
#declare a3b = 65;
#declare a4a = 65;
#declare a4b = 85;
#declare dist_dedoa = 25;
#declare dist_dedob = 45;

#declare s = seed(48234234);
#declare raio = 6;
#declare tamanho_pata = 5;
#declare tam_ante_pe = 4;
#declare a4 = 65;
#declare i = 1;

#declare clocky = mod(clock*1.0,1);
#declare clock0 = clocky;
#declare clock1 = mod(clocky+0.5, 1);

#declare patas = union {

#while (angulo <= angulo_final)

#if (mod(i,2) = 1)
  #declare clockp = clock0;
#else
  #declare clockp = clock1;
#end

#declare dist_dedo = dist_dedoa+(dist_dedob-dist_dedoa)*rand(s);

#if (clockp <= 0.25)
  #declare a0 = -10;
  #declare a1 = 25+(20*clockp*4);
  #declare a2 = 95-(30*clockp*4);
  #declare a3 = 45+(30*clockp*4);
#else
  #if (clockp <= 0.50)
    #declare a0 = -10+(20*(clockp - 0.25)*4);
    #declare a1 = 45;
    #declare a2 = 65;
    #declare a3 = 75;
  #else
    #if (clockp <= 0.75)
      #declare a0 = 10;
      #declare a1 = 45-(20*(clockp - 0.50)*4);
      #declare a2 = 65+(30*(clockp - 0.50)*4);
      #declare a3 = 75-(30*(clockp - 0.50)*4);
    #else
      #if (clockp <= 1.00)
        #declare a0 = 10-(20*(clockp - 0.75)*4);;
        #declare a1 = 25;
        #declare a2 = 95;
        #declare a3 = 45;
      #end
    #end
  #end
#end

#declare pe = union {
  cylinder { < 0, 0, 0>, <0, 1.0, 0 >, 0.1
      rotate dist_dedo*z 
      rotate a4*(-x) }
  cylinder { < 0, 0, 0>, <0, 1.0, 0 >, 0.1
      rotate a4*(-x) }

  cylinder { < 0, 0, 0>, <0, 1.0, 0 >, 0.1 
      rotate -dist_dedo*z
      rotate a4*(-x) }
}

#declare ante_pe = union {
  cylinder { <0, 0, 0>, <0, tam_ante_pe, 0>, 0.4 }
  sphere { <0, 0, 0>, 0.4 }

  object { pe
    translate <0, tam_ante_pe, 0>
  }

  rotate a3*(-x)
}

#declare ante_pata = union {
  cylinder { <0, 0, 0>, <0, tamanho_pata, 0>, 0.4 }
  sphere { <0, 0, 0>, 0.4 }
  

  object { ante_pe
    translate <0, tamanho_pata, 0>
  }

  rotate a2*(-x)
}

#declare pata = union {
  cylinder { <0, 0, 0>, <0, tamanho_pata, 0>, 0.4 }
  sphere { <0, 0, 0>, 0.4 }

  object { ante_pata
    translate <0, tamanho_pata, 0>
  }

  rotate a1*x
  rotate a0*z
}


object { pata
  translate <0, raio, 0>
  rotate angulo*z

  pigment { Turquoise }
}

#declare angulo = angulo + angulo_passo;
#declare i = i + 1;

#end

} // patas


// Corpo
#declare corpo = sphere { <0, 0, 0>, 6 
  pigment { Green }
  finish {
    ambient 0.05 diffuse 0.05
    reflection 0.3*Green
    specular 0.20 roughness 0.05
    metallic
  }
    
}

// Cabeca
#declare cabeca = sphere { <0, 0, 8>, 2
  pigment { Brown }
  finish {
    ambient 0.05 diffuse 0.05
    reflection 0.3*Brown
    specular 0.20 roughness 0.05
    metallic
  }
}


#if (clock1 <= 0.25)
  #declare ang = 0;
#else
  #if (clock1 <= 0.50)
    #declare ang = (10*(clock1 - 0.25)*4);
  #else
    #if (clock1 <= 0.75)
      #declare ang = 10;
    #else
      #if (clock1 <= 1.00)
        #declare ang = 10 + (10*(clock1 - 0.75)*4);
      #end
    #end
  #end
#end
union {
  object { patas }
  object { corpo }
  object { cabeca }

  rotate ang*z 
}