// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2017-05-07 20:10:09 by stolfilocal // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_plastico_branco = texture{ pigment{ color rgb < 1.0, 1.0, 1.0 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_plastico_preto = texture{ pigment{ color rgb < 0.0, 0.0, 0.0 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_plastico_vermelho = texture{ pigment{ color rgb < 0.90, 0.20, 0.10 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_plastico_azul = texture{ pigment{ color rgb < 0.1, 0.2, 0.9 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } // ====================================================================== // DESCRIÇÃO DA CENA //////////////////// // Camara 0 // //////////////////// #macro camara_0_0 (textura) sphere{ < 1.0, 1.00, 2.1 >, 0.6 texture{ textura } } #end #macro camara_0_1 (textura) cylinder{ < 1.0, 1.0, 1.5 >, < 1.0, 1.0, 2.1 >, 0.6 texture{ textura } } #end #macro camara_0_2 (textura) cone{ < 1.0, 1.0, 1.0 >, 0.8, < 1.0, 1.0, 1.5 > 0.6 texture{ textura } } #end #macro camara_0_3 (textura) cylinder{ < 1.0, 1.0, 0.0 >, < 1.0, 1.0, 1.0 >, 0.8 texture{ textura } } #end // Macro Camara 0 Completa // #macro camara_0 (textura) union{ object{ camara_0_0(textura) } // 0 - sphere object{ camara_0_1(textura) } // 1 - cylinder object{ camara_0_2(textura) } // 2 - cone object{ camara_0_3(textura) } // 3 - cylinder } #end //////////////////// // Camara 1 // //////////////////// #macro camara_1_0 (textura) cone{ < 1.0, 1.0, 2.0 >, 0.8, < 1.0, 1.0, 2.5 > 0.5 texture{ textura } } #end #macro camara_1_1 (textura) cone{ < 1.0, 1.0, 1.5 >, 0.6, < 1.0, 1.0, 2.0 > 0.8 texture{ textura } } #end #macro camara_1_2 (textura) cone{ < 1.0, 1.0, 1.0 >, 0.8, < 1.0, 1.0, 1.5 > 0.6 texture{ textura } } #end #macro camara_1_3 (textura) cylinder{ < 1.0, 1.0, 0.0 >, < 1.0, 1.0, 1.0 >, 0.8 texture{ textura } } #end // Macro Camara 1 Completa // #macro camara_1 (textura) union{ object{ camara_1_0(textura) } // 0 - cone object{ camara_1_1(textura) } // 1 - cone object{ camara_1_2(textura) } // 2 - cone object{ camara_1_3(textura) } // 3 - cylinder } #end /*#macro hiperpeao (textura, i, j) union{ object{ chapeu_peao(textura) scale 0.5 translate < i, j, 0 > } // 1 - sphere object{ cabeca_peao(textura) scale 0.5 translate < i, j, 0 > } // 1 - sphere object{ corpo_peao(textura) scale 0.5 translate < i, j, 0 > } // 1 - sphere object{ base_peao(textura) scale 0.5 translate < i, j, 0 > } // 1 - sphere } #end*/ // Macro Tunel #macro tunel (centro0, centro1, textura) cylinder{ centro0 + <0.0, 0.0, 0.5>, centro1 + <0.0, 0.0, 0.5>, 0.3 texture{ textura } } #end #macro mina (n, m) // seed para gerador de números aleatórios #declare rng = seed(0); // uso: rand(rng) // n - número de camaras // m - número de túneis // caso apenas uma camara #if (n = 1) #declare centro = ; #declare tamanho = (rand(rng) * 10) + 1; #declare prob = rand(rng); #if(prob < 0.5) object{ camara_0(tx_plastico_azul) scale tamanho translate centro } #else object{ camara_1(tx_plastico_vermelho) scale tamanho translate centro } #end // end if // colocar elevador object{ cylinder{ centro, centro + <0.0, 0.0, 1000.0>, 0.3 texture{ tx_plastico_preto } } } // caso mais de uma camara #else #if (n > 1) // criar array de centros e renderiza camaras #declare centros_camaras = array[n]; #declare i = 0; #while (i < n) #declare centro = ; #declare centros_camaras[i] = centro; #declare tamanho = (rand(rng) * 10) + 1; #declare prob = rand(rng); #if(prob < 0.5) object{ camara_0(tx_plastico_azul) scale tamanho translate centro } #else object{ camara_1(tx_plastico_vermelho) scale tamanho translate centro } #end // end if #declare i = i + 1; #end // end while centros // para cada tunel #declare i = 0; #while (i < m) // escolher camaras j e k, diferentes #declare j = int(rand(rng) * n); #declare k = int(rand(rng) * n); // se k == j, reescolher #while(j = k) #declare k = int(rand(rng) * n); #end // cria tunel entre camaras j e k #declare centro0 = centros_camaras[j]; #declare centro1 = centros_camaras[k]; tunel(centro0, centro1, tx_plastico_branco) #declare i = i + 1; #end // end while tunel // colocar elevador em camara aleatória #declare j = int(rand(rng) * n); #declare centro = centros_camaras[j]; object{ cylinder{ centro, centro + <0.0, 0.0, 1000.0>, 0.3 texture{ tx_plastico_preto } } } #end // end if #end // end else #end // end mina macro #include "eixos.inc" // Declaração de cena union{ mina(50, 100) } #include "camlight.inc" #declare centro_cena = < 150.00, 150.00, 150.00 >; #declare raio_cena = 200.0; #declare dir_camera = < 14.00, 7.00, 4.00 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)