// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2097-22-03 17:48:09 by Luis Gustavo

// ======================================================================
// CORES E TEXTURAS

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

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

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

#declare tx_pink = 
  texture{
    pigment{ color rgb < 0.98, 0.05, 0.75 > }
    finish{ diffuse 0.8 ambient 0.2 specular 0.5 roughness 0.005 }
  }

#declare tx_orange = 
  texture{
    pigment{ color rgb < 0.98, 0.20, 0.20 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.05 }
  }

#declare tx_verde = 
  texture{
    pigment{ color rgb < 0.20, 0.90, 0.10 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
  }

#declare tx_fosca = 
  texture{
    pigment{ color rgb < 1.00, 0.80, 0.10 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }


#declare tx_xadrez =
  texture{
    pigment{ checker color rgb < 0.00, 0.0, 0.00 >, color rgb < 1.00, 0.97, 0.90 > }
    finish{ diffuse 0.9 ambient 0.1 }
    scale 1.0
  }

// ======================================================================
// DESCRIÇÃO DA CENA 
// Partes da cena:
  

#declare camara2 = 
  union { 
	  
	  sphere{ < 0,0,2 >, 1.50
	  texture{ tx_verde }
	  }

          cylinder{
	  < +0.0, +0.00, +0.0 >,
	  < 0.00, +0.00, +2.0 >,
	  1.5
	  texture{ tx_orange }
  	  }
  }


#declare camara1 = 
  union {	  
	  cone{ < 0,0,2>, 1.30, <0,0,3.5>, 0.20 
	  texture{ tx_pink }
	  }
	  
          cylinder{ 
	  < +0.0, +0.00, +0.0 >,
	  < 0.00, +0.00, +2.0 >,
	  1.3
	  texture{ tx_orange }
  	  }
  }



#include "eixos.inc"

// Aqui está a cena, finalmente:

//n -> numero de camaras
//m -> numero de tuneis

#macro mina(n,m)
	union{

		#declare centro = array[n];
		#declare roleta1 =seed(5);

		#declare i=0;

		//cria centros aleatorios
		#while (i<n)  

			#declare centro[i] = < (rand(roleta1)*100), (rand(roleta1)*100), (rand(roleta1)*100)>;				
			#declare i = i+1;
		#end



		//projeta os objetos
		#declare j=0;
		#while (j<n)  
			object{ camara2 scale rand(roleta1)*3 translate centro[j] }
			#declare j = j+1;	
		#end

		//liga as camaras
		#declare i=0; 
		#while (i<m)

			#declare objeto1 = int(rand(roleta1)*n);
			#declare objeto2 = int(rand(roleta1)*n);

			#if(objeto1 = objeto2)
			#else
				#declare tunel =
					cylinder{
		 		           centro[objeto1],
					   centro[objeto2],
		 			   0.3
					   texture{ tx_plastico }
					 }
				object{ tunel }
				#declare i = i+1;
			#end
		
		#end

		//ligando uma câmara qualquer à entrada (tunel laranja)
		#declare camaraInicial = int(rand(roleta1)*n);
		#declare tunel =
			 cylinder{
				centro[camaraInicial],
				centro[camaraInicial] + <0,0,100>,
			 	0.3
				texture{ tx_orange }
			}
			object{ tunel }
	}
#end

object{mina(50,100)}


#include "camlight.inc"
#declare centro_cena = < 50.00, +50.00, 50.00>;
#declare raio_cena = 100.0;
#declare dir_camera = < 14.00, 7.00, 4.00 >;
#declare dist_camera = 50*raio_cena;
#declare intens_luz = 1.20;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)