// Last edited on 2003-12-08 21:01:09 by stolfi
// Exemplo de arquivo de descricao de cena para POV-ray

// ======================================================================
#include "colors.inc"

#declare velocidade = 5;

#declare ctr = <3,0,0> + clock*<velocidade,0,0>;
#declare camDir = <15,-20,20>;
 
// sphere{ ctr, 1 texture{ pigment{ color rgb <1,0,1> } finish { ambient 0.6 diffuse 0.4 } } }

camera {
  location   ctr + 0.70*camDir
  right      0.80*x
  up         0.60*y
  sky        z
  look_at    ctr
}
 

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

// FONTES DE LUZ
light_source {
  10 * < +30.0, -70.0, +80.0 >              // Posição da lâmpada.
  color rgb 0.7 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 
light_source {
  10 * < +80.0, -10.0, +80.0 >              // Posição da lâmpada.
  color rgb 0.5 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
} 

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

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

background{ color rgb < 0.75, 0.80, 0.85 > }
#declare T = 1/5;
#declare Zchao = -1.4;
#declare chao =
  plane{ 
    z, Zchao
    texture{ 
      pigment{ checker color rgb <0.6,0.7,0.5>, color rgb <0.5,0.6,0.2> }
      finish{ diffuse 0.7 ambient 0.3 }
      scale 0.5*velocidade
    }
  }

#declare pe_da_cama = cylinder {
  <0,0,1>
  <0,0,-1>
  0.3
  pigment { Brown }
}

#declare cama = union {
  box {
    <0,0,0>
    <5,6,1>
    pigment { White }
  }
  object { pe_da_cama translate <0,0,0> }
  object { pe_da_cama translate <5,0,0> }
  object { pe_da_cama translate <0,6,0> }
  object { pe_da_cama translate <5,6,0> }
}

#declare cabeca = 
sphere {
  <0,0,0>
  0.8
  pigment{ color rgb < 0.2,0.15,0.10 > }
}

#declare corpo = union {
  difference {
    sphere {
      <0,0,0>
      2
    }
    box {
      <-2,-2,0>
      <2,2,-2>
    }
    pigment { Red }
  }
  object { cabeca translate <2.4,0,0> }
}

#declare pata4 = cone {
  <0,0,0>, 0.1
  <1,0,0>, 0
}

// Aqui está a cena, finalmente:

union{
  #declare i = 0;
  #declare inversao = 1;
  #declare grupo = 0;
  object { cama translate <12,0,Zchao+1> }
  object { corpo translate clock*<velocidade,0,0> }
  #while(i < 7)
    #if (mod(clock+T*grupo/2,T) <= T/4)
      #declare alfa = 30 + 30*mod(clock+T*grupo/2,T)/T;
    #end
    #if (T/4 < mod(clock+T*grupo/2,T) & mod(clock+T*grupo/2,T) <= T/2)
      #declare alfa = 60 - 30*mod(clock+T*grupo/2,T)/T;
    #end
    #if (T/2 < mod(clock+T*grupo/2,T))
      #declare alfa = 30;
    #end

    #if (mod(clock+T*grupo/2,T) <= T/2)
      #declare alfa2 = 40*mod(clock+T*grupo/2,T)/T;
    #else
      #declare alfa2 = 80 - 40*mod(clock+T*grupo/2,T)/T;
    #end

    #declare beta = alfa-120;
    #declare gama = -20;
    #declare delta = -10;

    #declare pata3 = union {
      cylinder {
        <0,0,0>
        <0,1,0>
        0.1
      }
      object {
        pata4
        rotate delta*x
        translate <0,1,0>
      }
    }

    #declare pata2 = union {
      cylinder {
        <0,0,0>
        <0,1,0>
        0.1
      }
      object {
        pata3
        rotate gama*x
        translate <0,1,0>
      }
    }

    #declare pata = union {
      cylinder {
        <0,0,0>
        <0,1,0>
        0.1
      }
      object {
        pata2
        rotate beta*x
        translate <0,1,0>
      }
    }

   object {
      pata
      pigment{ color rgb < 0.60,0.25,0.10 > }
      scale inversao*<0,1,0>
      rotate inversao*alfa*x
      rotate -alfa2*z
      translate (clock*<velocidade,0,0> + 2*<cos(pi/3 + i*2*pi/9),sin(pi/3 + i*2*pi/9),0>) 
    }
    #declare i = i+1;
    #declare grupo = 1-grupo;
    #if (i = 3)
      #declare i = i+1;
      #declare inversao = -1;
    #end
  #end

}

object{chao}