// Last edited on 2004-01-23 12:25:16 by stolfi
// Exemplo de arquivo de descricao de cena para POV-ray

#include "colors.inc"

#declare pi1 = 3.1415926535897932384626;

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

#declare ctr = < 0.00, 0.00, 0.00 >;
#declare camDir = < 8.00, 30.00, -3.00 >;

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

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

light_source { 10 * < +50.0, +30.0, +50.0 > color rgb 1.2 * < 1.00, 1.00, 1.00 > } 
light_source { <0,0,0>                      color rgb 0.5*< 1.00, 1.00, 1.00 > }

light_source { 10 * < +50.0, 20.0, +10.0 > color rgb 0.8 * < 1.00, 1.00, 1.00 >
  rotate 180*clock*z
} 

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

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


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

#declare cinza = 
  texture {
    pigment { color rgb < 0.90, 0.90, 0.90 > }
    finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 }
  }
    
  
#declare gera_cor = seed(1234);
#declare gera_junta = seed(5678);
  

#declare noh =
  sphere {
    < 0.00, 0.00, 0.00 >, 0.80
    texture { vermelho }
  }
    
#declare pau1 = 
  cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, 0.00, 3.00 >,
    0.2
    texture { cinza }
    
  }
  
#declare pau2 =
 cylinder {
    < 0.00, 0.00, 0.00 >,
    < 5.50, 0.00, 0.00 >,
    0.2
    texture { cinza }
    
  }
  
#declare pau3 =
 cylinder {
    < 0.00, 0.00, 0.00 >,
    < 0.00, -5.00, 0.00 >,
    0.2
    texture { cinza }
    
  }

#declare pacote1 =
  sphere 
  {
    <0.0, 0.0, 0.00>,
    0.5
  }

#declare parte=
union{
  object {noh}
  object {pau1}
  object {pau2}
  object {noh translate <0.0, 0.0, 2.5>}
  object {pau2 translate <0.0, 0.0, 2.5>}
  object {pau3}
  object {pau3 translate <0.0, 0.0, 2.5>}
  translate <-200.0, 0.0, 0.0>
}


// Aqui está a cena, finalmente:

#declare s_cor1 = seed(1234);
#declare s_cor2 = seed(1546);
#declare s_cor3 = seed(67877);

#declare s_pos1 = seed(2355);
#declare s_pos2 = seed(34235);
#declare s_pos3 = seed(5464554);
#declare s_pos1b = seed(67867);
#declare s_pos2b = seed(2135);
#declare s_pos3b = seed(21435);

#declare s_prob1 = seed(453434);
#declare s_prob2 = seed(434664);
#declare s_prob3 = seed(79685);
#declare s_prob1b = seed(456542);
#declare s_prob2b = seed(8954534);
#declare s_prob3b = seed(324566);




#declare j=0;

#while (j<50)
#declare i=1;
 #while (i<50)
 
  #declare R2 = rand(s_cor2);
  #declare G2 = rand(s_cor2);
  #declare B2 = rand(s_cor2);
  
  #declare R1 = rand(s_cor1);
  #declare G1 = rand(s_cor1);
  #declare B1 = rand(s_cor1);
  
  #declare pos1 = rand(s_pos1);
  #declare pos2 = rand(s_pos2);
  #declare pos3 = rand(s_pos3);
  #declare pos1b = rand(s_pos1b);
  #declare pos2b = rand(s_pos2b);
  #declare pos3b = rand(s_pos3b);
  
  
  
  #declare prob1 = rand(s_prob1);
  #declare prob2 = rand(s_prob2);
  #declare prob3 = rand(s_prob3);
  #declare prob1b = rand(s_prob1b);
  #declare prob2b = rand(s_prob2b);
  #declare prob3b = rand(s_prob3b);
  
  
  
  union{
  object {noh}
  #if (prob1<0.4)
    #if (pos1<0.3)
      object {pacote1 translate <0,0,pos1*10> translate <0,0,clock*2> pigment{color rgb <R1,G1,B1>}}
      object {pau1}
    #else
      object {pau1}
    #end
  #else
    object {pau1}
  #end
  
  
  #if (prob2<0.7)
    #if (pos2<0.55)
      object {pacote1 translate <pos2*10,0,0> translate <clock*3,0,0> pigment{color rgb <R1,G1,B1>}}
      object {pau2}
    #else
      object {pau2}
    #end
  #else
    object {pau2}
  #end
  
  object {noh translate <0.0, 0.0, 2.5>}
  
  #if (prob2b<0.7)
    #if (pos2b<0.55)
      object {pacote1 translate <pos2b*10,0,2.5> translate <-clock*3,0,0> pigment{color rgb <R2,G2,B2>}}
      object {pau2 translate <0.0, 0.0, 2.5>}
    #else
      object {pau2 translate <0.0, 0.0, 2.5>}
    #end
  #else
    object {pau2 translate <0.0, 0.0, 2.5>}
  #end
 
  
  #if (prob3<0.5)
    #if (pos3<0.5)
      object {pacote1 translate <0,-pos3*10,0> translate <0, -clock*2, 0> pigment{color rgb <R1,G1,B1>}}
      object {pau3}
    #else
      object {pau3}
    #end
  #else
    object {pau3}
  #end
  
  object {pau3 translate <0.0, 0.0, 2.5>}
  
  
  translate <-150.0, 0.0, 0.0>
  translate <i*5.5, -j*5, -10.0>
}
  
  
  #declare i=i+1;
#end
#declare j=j+1;
#end

#declare j=0;

#while (j<50)
#declare i=1;
 #while (i<50)
  
  #declare R2 = rand(s_cor2);
  #declare G2 = rand(s_cor2);
  #declare B2 = rand(s_cor2);
  
  #declare R1 = rand(s_cor1);
  #declare G1 = rand(s_cor1);
  #declare B1 = rand(s_cor1);
  
  #declare pos1 = rand(s_pos1);
  #declare pos2 = rand(s_pos2);
  #declare pos3 = rand(s_pos3);
  #declare pos1b = rand(s_pos1b);
  #declare pos2b = rand(s_pos2b);
  #declare pos3b = rand(s_pos3b);
  
  
  
  #declare prob1 = rand(s_prob1);
  #declare prob2 = rand(s_prob2);
  #declare prob3 = rand(s_prob3);
  #declare prob1b = rand(s_prob1b);
  #declare prob2b = rand(s_prob2b);
  #declare prob3b = rand(s_prob3b);
  
  
  
  union{
  object {noh}
  #if (prob1<0.4)
    #if (pos1<0.3)
      object {pacote1 translate <0,0,pos1*10> translate <0,0,-clock*2> pigment{color rgb <R1,G1,B1>}}
      object {pau1}
    #else
      object {pau1}
    #end
  #else
    object {pau1}
  #end
  
  
  #if (prob2<0.7)
    #if (pos2<0.55)
      object {pacote1 translate <pos2*10,0,0> translate <-clock*3,0,0> pigment{color rgb <R1,G1,B1>}}
      object {pau2}
    #else
      object {pau2}
    #end
  #else
    object {pau2}
  #end
  
  object {noh translate <0.0, 0.0, 2.5>}
  
  #if (prob2b<0.7)
    #if (pos2b<0.55)
      object {pacote1 translate <pos2b*10,0,2.5> translate <clock*4,0,0> pigment{color rgb <R2,G2,B2>}}
      object {pau2 translate <0.0, 0.0, 2.5>}
    #else
      object {pau2 translate <0.0, 0.0, 2.5>}
    #end
  #else
    object {pau2 translate <0.0, 0.0, 2.5>}
  #end
 
  
  #if (prob3<0.5)
    #if (pos3<0.5)
      object {pacote1 translate <0,-pos3*10,0> translate <0,-clock*2,0> pigment{color rgb <R1,G1,B1>}}
      object {pau3}
    #else
      object {pau3}
    #end
  #else
    object {pau3}
  #end
  
  object {pau3 translate <0.0, 0.0, 2.5>}
  
  
  translate <-150.0, 0.0, 0.0>
  translate <i*5.5, -j*5, 10.0>
}
 
  #declare i=i+1;
#end
#declare j=j+1;
#end