// Exemplo de arquivo de descricao de ANIMAÇÃO para POV-ray
// Last edited on 2009-09-24 15:40:22 by stolfi

#declare tx_vidro = 
  texture{
    pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.70 }
    finish{ diffuse 0.03 reflection 0 ambient 0.02 specular 0.25 roughness 0.005 }
  }

#declare tx_vermelho= 
  texture{
    pigment{ color rgb < 1.00, 0, 0 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }

#declare tx_branco= 
  texture{
    pigment{ color rgb < 1, 1, 1 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }

#macro quadro(tt)
// Gera o quadro do filme (cena, luzes e câmera) 
// para o instante {tt} -- um número real entre 0 e 1.

// ======================================================================
// CÂMERA 

camera {
  location  <  0.00, 20.00, -20.00 >  // Posição do observador.
  right     1.00*x                // Largura RELATIVA da imagem.
  up        0.75*y                 // Altura RELATIVA da imagem.      
  sky       z                      // Qual direção é "para cima"?
  look_at   <  2.00, -5.00, 0.00 >  // Para onde a câmera está apontando.
} 
// Nota: os parâmetros "right" e "up" devem ter a mesma proporção
// que os parâmetros ${WIDTH} e ${HEIGHT} no Makefile.

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

light_source {
  10 * < +50.0, +30.0, +50.0 >              // Posição da lâmpada.
  color rgb 1.2 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

light_source {
  10 * < +50.0, -10.0, +10.0 >             // Posição da lâmpada.
  color rgb 0.8 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

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

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

#declare raio = 2.000;

// Um parãmetro que varia {+1, 00, -1, 00, +1}:
#declare ctt = sin(2*pi*tt);
#declare att = cos(4*2*pi*tt);

// Um parâmetro que varia {00, +1, 00, -1, 00}:  
#declare stt = 45*sin(3*2*pi*tt);




#macro pe()
    box{ <-1,-0.4,-1> , <4,0.4,2> texture{tx_branco} }
#end


#macro canela(ape) 
  union{
    cylinder{<0,0,0>,<0,-5,0>,1 texture{tx_branco} }
    sphere {<0,-4,0>,1 texture{tx_vermelho}}
    object { pe() rotate ape*z translate -5*y } 
}
#end


#macro coxa(ape,acanela)
  union{
    cylinder{<0,0,0>,<0,-8,0>,1 texture{tx_branco}}
    sphere {<0,-7,0>,1 texture{tx_vermelho}}
    object{ canela(ape) rotate acanela*z translate -8*y}
}
#end


#macro perna(ape,acanela,acoxa)
  union{
     cylinder{<0,0,0>,<0,-10,0>,1 texture{tx_branco}}
    sphere {<0,-9,0>,1 texture{tx_vermelho}}
     object{ coxa(ape,acanela) rotate -acoxa*z translate -10*y}
}
#end  


#macro corpo(ape,acanela,acoxa)
   union{
     box{<-5,0,5>,<5,0.5,-5> texture{tx_branco}}
     object{ perna(ape,acanela,acoxa) translate 4*z  }
     object{ perna(ape,acanela,acoxa) translate -4*z  }
}


#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.25;
#declare t2 = 0.5;
#declare t3 = 0.75;
#declare t4 = 1;

#declare ape0 = 90;
#declare ape1 = 90;
#declare ape2 = 90;
#declare ape3 = 0;
#declare ape4 = 90;

#declare acanela0 = -15;
#declare acanela1 = -30;
#declare acanela2 = 0;
#declare acanela3 = 0;
#declare acanela4 = -15;

#declare acoxa0 = 45;
#declare acoxa1 = 60;
#declare acoxa2 = 0;
#declare acoxa3 = 0;
#declare acoxa4 = 45;


#if ((clock >= t0) & (clock <=t1))
#declare ape = interpola(t0,ape0,t1,ape1,clock);
#declare acanela = interpola(t0,acanela0,t1,acanela1,clock);
#declare acoxa = interpola(t0,acoxa0,t1,acoxa1,clock);
#end


#if ((clock >= t1) & (clock <=t2))
#declare ape = interpola(t1,ape1,t2,ape2,clock);
#declare acanela = interpola(t1,acanela1,t2,acanela2,clock);
#declare acoxa = interpola(t1,acoxa1,t2,acoxa2,clock);
#end


#if ((clock >= t2) & (clock <=t3))
#declare ape = interpola(t2,ape2,t3,ape3,clock);
#declare acanela = interpola(t2,acanela2,t3,acanela3,clock);
#declare acoxa = interpola(t2,acoxa2,t3,acoxa3,clock);
#end



#if ((clock >= t3) & (clock <=t4))
#declare ape = interpola(t3,ape3,t4,ape4,clock);
#declare acanela = interpola(t3,acanela3,t4,acanela4,clock);
#declare acoxa = interpola(t3,acoxa3,t4,acoxa4,clock);
#end













#declare tinta_B = 
  texture {
    pigment { color rgb < 1.00, 0.80, 0.10 > }
    finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 }
  }
  

#declare bola = 
	sphere{<0,0,0>,3 texture{tx_branco}}
 
// Aqui está a cena, finalmente:
  union {
	object{corpo(ape,acanela,acoxa)}
  translate 3*ctt*y

}

#end

// gera o quadro correspondente ao instante dado {clock}:
quadro(clock)