// 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 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 #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 // bola unitária #macro bola (raio, centro, textura) sphere{ centro, raio texture{ textura } } #end #declare x0 = -5; // posição final #declare x1 = 5; // posição inicial // Macro Círculo #macro circulo (raioS, raioC, start, stop, passo) union{ #for (i, start, stop, passo) #declare centro = raioC * <0, cos(2 * pi * i), sin(2 * pi * i)>; object{ bola(raioS, centro, tx_plastico_vermelho) } #end // end while } #end // Macro Palito #macro palito (raio, p0, p1, passo) union{ #for (i, -1, 1, passo) #declare centro = p0 + i * p1; object{ bola(raio, centro, tx_plastico_vermelho) } #end // end while } #end // Macro Palito #macro quadrado (raio, p0, p1, passo) union{ palito(raio, <-0.5, +0.5, 0>, <+0.5, +0.5, 0>, passo) palito(raio, <+0.5, +0.5, 0>, <+0.5, -0.5, 0>, passo) palito(raio, <+0.5, -0.5, 0>, <-0.5, -0.5, 0>, passo) palito(raio, <-0.5, -0.5, 0>, <-0.5, +0.5, 0>, passo) } #end #include "eixos.inc" // Declaração de cena union{ //circulo(0.3, 1.0, 0, 0.25, 0.01) //palito(0.3, <0, 0, 0>, <0, 1, 0>, 0.01) //quadrado(0.3, <0, 0, 0>, <1, 0, 1>, 0.01) palito(0.3, <0, 0, 0>, <0, 0, 1>, 0.01) object { circulo(0.3, 1.0, 0.25, 0.5, 0.01) translate <0, 1.0, 1.0> } object{ palito(0.3, <0, 0, 0>, <0, 1, 0>, 0.01) translate <0, 2.0, 2.0> } object { circulo(0.3, 1.0, 0.5, 1.0, 0.01) translate <0, -1.0, -1.0> } } #include "camlight.inc" #declare centro_cena = < 0.0, 0.0, 0.0>; #declare raio_cena = 10.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)