// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2010-03-04 15:44:01 by stolfi

// ======================================================================
// CORES E TEXTURAS

#include "colors.inc"
#include "textures.inc"
#include "woods.inc"
#include "stones.inc"

background{ color rgb <1, 1, 1 > }

#declare tx = texture{
      pigment { color Red }
      finish { phong 1 }

}


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

// Partes da cena:

#declare raioEsfera = 0.5;
#declare alturaCone = 2;
#declare raioMaiorCone = 1;
#declare larguraPerna = 0.2;
#declare alturaCoxa = 2;
#declare alturaCanela = 2;
#declare comprPe = 0.5;
#declare larguraPe = 0.2;
  
#declare chao = 
  box{ <-10,-10,-10>, <+20,+20,-8>}
  
#declare bolinha = 
  sphere { <0, 0, 0>, raioEsfera}

#declare corpo =
	cone{<0.00, 0.00, 0>, raioMaiorCone, <0.00, 0.00, alturaCone>, raioEsfera/4}
	
#declare canela =
	cylinder{
    < 0.00, 0.00, 0>,
    < 0.00, 0, -alturaCanela>,
    larguraPerna } 
	
#declare coxa =
	cylinder{
    < 0.00, 0.00, 0>,
    < 0.00, 0, -alturaCoxa>,
    larguraPerna } 

#macro pe()
  object { cylinder{
    < 0.00, 0.00, 0>,
    < comprPe, 0, 0>,
    larguraPe } 
    }
#end
		
#macro anteperna(angPe)
  union {
  	  object {canela}
  	  object {pe() 
  	  rotate y*-angPe 
  	  translate <0,0,-alturaCanela>
  	  }
  	}
#end

#macro perna(angAntePerna, angPe)
  union {
  		object {coxa}
  		object {anteperna(angPe) rotate y*angAntePerna translate <0,0,-alturaCoxa>}
  	}
#end

#macro saltopode(angPerna, angAntePerna, angPe)
	union {
		object {bolinha translate <0,0,alturaCone>}
		object {corpo}
		object {perna(angAntePerna, angPe) rotate y*-angPerna}
		}
#end

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

  #declare t0 = 0;
  #declare t1 = 0.3;
  #declare t2 = 0.6;
  #declare t3 = 0.9;
	#declare t4 = 1;

	#declare angPe0 = 0;
	#declare angPe1 = 30;
	#declare angPe2 = 45;
	#declare angPe3 = 30;
	
	#declare angPerna0 = 60;
	#declare angPerna1 = 80;
	#declare angPerna2 = 0;
	#declare angPerna3 = 30;
	
	#declare angCanela0 = 70;
	#declare angCanela1 = 50;
	#declare angCanela2 = 0;
	#declare angCanela3 = 20;
	
	
	#if ((clock >= t0) & (clock <= t1))
		#declare angPerna = interpola(t0, angPerna0, t1, angPerna1, clock);
		#declare angPe = interpola(t0, angPe0, t1, angPe1, clock);
		#declare angCanela = interpola(t0, angCanela0, t1, angCanela1, clock);
	#end
	
	#if ((clock >= t1) & (clock <= t2))
		#declare angPerna = interpola(t1, angPerna1, t2, angPerna2, clock);
		#declare angPe = interpola(t1, angPe1, t2, angPe2, clock);
		#declare angCanela = interpola(t1, angCanela1, t2, angCanela2, clock);
	#end
	
	#if ((clock >= t2) & (clock <= t3))
		#declare angPerna = interpola(t2, angPerna2, t3, angPerna3, clock);
		#declare angPe = interpola(t2, angPe2, t3, angPe3, clock);
		#declare angCanela = interpola(t2, angCanela2, t3, angCanela3, clock);
	#end
	
	#if (clock >= t3)
		#declare angPerna = interpola(t3, angPerna3, t4, angPerna0, clock);
		#declare angPe = interpola(t3, angPe3, t4, angPe0, clock);
		#declare angCanela = interpola(t3, angCanela3, t4, angCanela0, clock);
	#end
	

#include "eixos.inc"

// Aqui está a cena, finalmente:

union{
  object{ eixos(3.00) }
  object{ chao texture{Silver_Metal}}
  object{ object{ saltopode(angPerna, angCanela, angPe) texture{tx}}}

}

#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 0.00 >;
#declare raio_cena = 10.0;
#declare dir_camera = < 3.50, 3.00, 1 >;
#declare dist_camera = 10.0;
#declare intens_luz = 2.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)