// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2020-09-30 19:57:13 by jstolfi // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_plastico_verde = texture{ pigment{ color rgb < 0.10, 1.00, 0.70 > } finish{ diffuse 1.0 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_fosca_amarela = texture{ pigment{ color rgb < 1.00, 0.80, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_vidro_verde = texture{ pigment{ color rgb < 0.00, 1.00, 0.00 > filter 0.70 } finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 } } #declare tx_fosca_vermelha = texture{ pigment{ color rgb <1.00, 0.20, 0.20> } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_xadrez = texture{ pigment{ checker color rgb < 0.15, 0.20, 0.65 >, color rgb < 0.10, 0.97, 0.90 > } finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } // ====================================================================== // MACROS #declare roleta = seed(173041); #macro chao(first_x, first_y, first_z, second_x, second_y, second_z) box{ , } #end #macro folha(raio, angle_x, angle_y, angle_z) #local raio = 10 * raio; union{ sphere{ <0, 0, 0>, raio texture{ tx_plastico_verde }} #local aresta = 1.2 * raio; #local altura = 0.25 * raio; box{ <-aresta, -aresta, -altura>, texture{ tx_plastico_verde } rotate } } #end #declare contador_de_bifurcacoes = 0; #declare encolhimento = 0.7; #macro arvore(base, altura, max_bif, raio) // base: posicao da base da arvore // altura: altura do primeiro tronco. os troncos seguintes sao gerados com uma altura de 0.8 vezes a altura inicial // max_bif: numero maximo de bifurcacoes // raio: raio do primeiro tronco #local valor_aleatorio = rand(roleta); #local cutoff = 0.95; union{ cylinder{ base, , raio texture{ tx_fosca_amarela } } #if (max_bif > 0) union{ sphere{ , raio texture{ tx_fosca_vermelha }} #if (rand(roleta) < cutoff) object{ arvore( base, altura * 0.8, max_bif-1, raio*encolhimento ) rotate <20 + 10*rand(roleta), 0, 45 * 10*rand(roleta)> translate } #end #if (rand(roleta) < cutoff) object{ arvore( base, altura * 0.8, max_bif-1, raio*encolhimento ) rotate <-20 + 10*rand(roleta), 0, -(45 * 10*rand(roleta))> translate } #end } #else object{ folha(raio, 45 * 10*rand(roleta), 45 * 10*rand(roleta), 45 * 10*rand(roleta)) translate } #end } #end #macro plantacao(num_arv_m, num_arv_n, altura, max_bif, raio) // num_arv_m: numero de arvores na direcao X // num_arv_n: numero de arvores na direcao Y // altura: altura do primeiro tronco das arvores // max_bif: numero maximo de bifurcacoes // raio: raio do primeiro tronco da arvore #local aresta_canteiro_quadrado = 30; union{ #local contador_m = 1; #while (contador_m <= num_arv_m) #local contador_n = 1; #while (contador_n <= num_arv_n) #local posicao_plantada_m = ((contador_m - 1) * aresta_canteiro_quadrado) + (rand(roleta) * 10); #local posicao_plantada_n = ((contador_n - 1) * aresta_canteiro_quadrado) + (rand(roleta) * 10); #local rotacao = rand(roleta)* 45; object{ arvore( <0, 0, 0>, altura, max_bif, raio) rotate <0, 0, rotacao> translate < posicao_plantada_m, posicao_plantada_n, 0 > } #local contador_n = contador_n + 1; #end #local contador_m = contador_m + 1; #end } #end // Aqui est� a cena, finalmente: #include "eixos.inc" union{ object{ eixos(20.00) } #local altura_primeiro_tronco = 7; #local max_bifurcacao = 10; #local numero_de_arvores_em_x = 5; #local numero_de_arvores_em_y = 5; #local raio_inicial = 2; object{ plantacao(numero_de_arvores_em_x, numero_de_arvores_em_y, altura_primeiro_tronco, max_bifurcacao, raio_inicial) } object{ chao(-75, -75, -1, 500, 500, 0) texture{ tx_xadrez }} } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 0.00 >; #declare raio_cena = 150.0; #declare dir_camera = < 20.00, 20.00, 10.00 >; #declare dist_camera = 2*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)