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

camera {
  location  <  17.00, -7.00, 6.00 >  // Posição do observador.
  right     -1.0*x                 // Largura RELATIVA da imagem.
  up        0.75*y                 // Altura RELATIVA da imagem.      
  sky       z                      // Qual direção é "para cima"?
  look_at   < 0.0, 0.0, -1.0 >  // 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.
//} 

//light_source {
//  10 * < 0.0, 0.0, -0.3 >             // Posição da lâmpada.
//  color rgb 1.3 * < 1.00, 1.00, 1.00 >   // Intensidade e corda luz.
//} 

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

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

#include "colors.inc" // Cores...

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

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

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

#declare pacote_forma_A = 
box {
  < -0.2, -0.2, -0.2 >,
  -1*< -0.2, -0.2, -0.2 >

  rotate 45*x
  rotate 45*y
  rotate 45*z
 
//  texture {
//    pigment {color rgb 0.5*<1, 1, 0> filter 0.7 }
//    finish {ambient .8 diffuse .6 }
//  }
}

#declare pacote_A =
light_source {
  <0, 0, 0>
  color rgb 0.5*<1, 1, 0>
  looks_like { pacote_forma_A }
}


#declare vertices = union {

#declare k = -2;
#while(k <= 2)

  #declare j = -2;
  #while (j <= 2)

    #declare i = -2;
    #while (i <= 2)

      sphere { <2*i, 2*j, 2*k> , 0.3 }

      #declare i = i + 1;
    #end

    #declare j = j + 1;
  #end

  #declare k = k + 1;
#end

texture { tinta_Azul }

}


#declare arestas = union {

#declare fonte = seed(3489834);

#declare k = -2;
#while(k <= 2)

  #declare j = -2;
  #while (j <= 2)

    #declare i = -2;
    #while (i <= 2)

      #if (i < 2)
        #if (rand(fonte) < 0.1)
	  #declare pac_loc = <2*(i+1), 2*j, 2*k>;
	  difference {
            cylinder { <2*i, 2*j, 2*k> , <2*(i+1), 2*j, 2*k>, 0.1 }
	    object { pacote_forma_A 
		     translate <(2*i)+2*clock, 2*j, 2*k> }
	  }
	  #declare corR = rand(fonte);
	  #declare corG = rand(fonte);
	  #declare corB = rand(fonte);
	  light_source { 
         	  <(2*i)+2*clock, 2*j, 2*k> 
		  color rgb 0.7*<corR, corG, corB>
                  looks_like { 
                     pacote_forma_A 
  		     texture {
 		     pigment {color rgb <corR, corG, corB> filter 0.7 }
 		     finish {ambient .8 diffuse .6 }
		   }
		  }
	  }
	#else
          cylinder { <2*i, 2*j, 2*k> , <2*(i+1), 2*j, 2*k>, 0.1 }
	#end
      #end


      #if (j < 2)

        #if (rand(fonte) < 0.1)
	  difference {
            cylinder { <2*i, 2*j, 2*k> , <2*i, 2*(j+1), 2*k>, 0.1 }
	    object { pacote_forma_A 
		     translate <2*i, (2*j)+2*clock, 2*k> }
	  }
	  #declare corR = rand(fonte);
	  #declare corG = rand(fonte);
	  #declare corB = rand(fonte);
	  light_source { 
         	  <2*i, (2*j)+2*clock, 2*k> 
		  color rgb 0.7*<corR, corG, corB>
                  looks_like { 
                     pacote_forma_A 
  		     texture {
 		     pigment {color rgb <corR, corG, corB> filter 0.7 }
 		     finish {ambient .8 diffuse .6 }
		   }
		  }
	  }
	#else
          cylinder { <2*i, 2*j, 2*k> , <2*i, 2*(j+1), 2*k>, 0.1 }
	#end
      #end


      #if (k < 2)

        #if (rand(fonte) < 0.1)
	  difference {
            cylinder { <2*i, 2*j, 2*k> , <2*i, 2*j, 2*(k+1)>, 0.1 }
	    object { pacote_forma_A 
		     translate <2*i, 2*j, (2*k)+2*clock> }
	  }
	  #declare corR = rand(fonte);
	  #declare corG = rand(fonte);
	  #declare corB = rand(fonte);
	  light_source { 
         	  <2*i, 2*j, (2*k)+2*clock> 
		  color rgb 0.7*<corR, corG, corB>
                  looks_like { 
                     pacote_forma_A 
  		     texture {
 		     pigment {color rgb <corR, corG, corB> filter 0.7 }
 		     finish {ambient .8 diffuse .6 }
		   }
		  }
	  }
	#else
	  cylinder { <2*i, 2*j, 2*k> , <2*i, 2*j, 2*(k+1)>, 0.1 }
	#end
      #end

      #declare i = i + 1;
    #end

    #declare j = j + 1;
  #end

  #declare k = k + 1;
#end

texture { tinta_Cinza }
//no_shadow

}

object { vertices }
object { arestas }