// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2003-07-31 12:50:37 by stolfi
#include "colors.inc"
// ======================================================================
// CÂMERA 

camera {
  location  <  10.00, 6.00, 2.50 >  // Posição do observador.
  right     <  -0.80, 0.00, 0.00  >   // Largura RELATIVA da imagem.
  up        <  0.00, 0.00, 0.60  >   // Altura RELATIVA da imagem.      
  sky       <  0.00, 0.00, 1.00  >   // Qual direção é "para cima"?
  look_at   <  -1.50, 0.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 fonte = 0.5;

#declare comp = 30;
#declare corpo = 
union{
sphere {<0,0,0>, comp/4 pigment{Blue}}
cylinder { <0,0,0>, <-comp,0,0>, comp/4 pigment {Blue}}
sphere {<-comp,0,0>, comp/4 pigment{Blue}}
scale <1,1,0.6>
}

union {
#declare final=5;
#declare i=0;
#while (i<final)
#declare angponta = 270 + fonte*90;

#declare ponta = 
cone { <0,0,0>, 2.0 <0,5,0>, 0.1 pigment{Green}}

#declare antemeio = 
union {
  cylinder{ <0,0,0>, <0,10,0>, 2 pigment{Blue}}
  sphere { <0,10,0>, 2 pigment{Red}}
  object {ponta rotate angponta*x translate <0,10,0>}
}

#declare angante = 360 - fonte*90;

#declare posmeio = 
union {
  cylinder{ <0,0,0>, <0,15,0>, 2 pigment {Blue}}
  sphere { <0,15,0>, 2 pigment{Red}}
  object {antemeio rotate angante*x translate <0,15,0>}
}

#declare angpos = 360 - fonte*90;

#declare outraponta = 
union {
  sphere{ <0,0,0>, 2 pigment{Red}}
  cylinder{ <0,0,0>, <0,15,0>, 2 pigment{Blue}}
  sphere { <0,15,0>, 2 pigment{Red}}
  object {posmeio rotate angpos*x translate <0,15,0>}
}

#if (clock<0.5)
#declare coiso = (clock*80-20)*(1+(-2*mod(i,2)));
#else
#declare coiso = (-80*(clock-0.5)+20)*(1+(-2*mod(i,2)));
#end
#declare angpataz = coiso;

#switch (clock)
#range (0, 0.25)
#declare coiso2 = (-80*clock)*(1+(-2*mod(i,2)));
#break
#range (0.26, 0.75)
#declare coiso2 = (80*clock-40)*(1+(-2*mod(i,2)));
#break
#else
#declare coiso2 = (-80*clock+80)*(1+(-2*mod(i,2)));
#end

#declare angpatax = fonte*45;
#declare pospata = comp - (comp*i)/(final-1);

#declare pata = 
union{
#if (coiso2>0)
object { outraponta rotate (angpatax+coiso2)*x  rotate angpataz*z 
         translate <-pospata+2,comp/4,0> }
object { outraponta rotate (angpatax)*x  rotate (180+angpataz)*z 
         translate <-pospata+2,-comp/4,0> }
}
#else
object { outraponta rotate (angpatax)*x  rotate angpataz*z 
         translate <-pospata+2,comp/4,0> }
object { outraponta rotate (angpatax-coiso2)*x  rotate (180+angpataz)*z 
         translate <-pospata+2,-comp/4,0> }
}
#end

object {pata scale 0.1}
#declare i=i+1;
#end
object {corpo scale 0.1}
translate <clock*5,0,0>}