// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2010-03-04 15:44:01 by stolfi // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_tronco = texture{ pigment{ color rgb < 0.65, 0.16, 0.16 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_chao = texture{ pigment{ color rgb < 0.15, 0.16, 0.16 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_branco = texture{ pigment{ color rgb < 0.8, 0.8, 0.8 > } finish{ diffuse 0.9 ambient 0.8 } } #declare tx_vermelha = texture{ pigment{ color rgb < 0.89, 0.15, 0.13 > } finish{ diffuse 0.9 ambient 0.8 } } #declare tx_xadrez = texture{ pigment{ checker color rgb < 0, 0, 0 >, color rgb < 1, 1, 1 >} finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } // ====================================================================== // DESCRIÇÃO DA CENA // Partes da cena: #declare chao = box{ <-50,-50,-1>, <+50,+50,0> texture{ tx_chao } } #macro esfera(raio) sphere { <0, 0, 0>, raio } #end #macro cilindro(tamanho, raio) cylinder { <0, 0, 0>, <0, 0, tamanho>, raio } #end #macro bit(b, d) union { object { cilindro(16, 1) texture { tx_tronco } } #if(d = 0) object { esfera(4) texture { tx_vermelha } } #else object { esfera(4) texture { tx_xadrez } } #end translate <0, 0, -6> rotate <0, b * 180, 0> } #end #macro fileira(bits, numero, prob) union { object { box { <0, 0, 0> <2, 10 * bits, 2> texture { tx_tronco } } translate <0, 0, -12> } #local i = 0; #while (i < bits) #local b = int(numero / pow(2,(bits - i - 1))); #local r = rand(SEED); #if (r < prob) #local d = 1; #else #local d = 0; #end #if (b = 1) #local numero = numero - pow(2,(bits - i - 1)); #end object { bit(b, d) translate <0, (i * 10) + 4, 0> } #local i = i + 1; #end } #end #macro abaco(linhas, bits, valores, prob) union { difference { object { box { <2, -2, -15> <-2, bits * 10 + 2, ((linhas - 1) * 22) + 13> } } object { box { <2.1, 0, -13> <-2.1, bits * 10, ((linhas - 1) * 22) + 11> } } texture { tx_tronco } } #local i = 0; #while (i < linhas) object { fileira(bits, valores[i], prob) translate <0, 0, i * 22> } #local i = i + 1; #end } #end #include "eixos.inc" // Aqui está a cena, finalmente: #declare bits1 = 7; #declare linhas1 = 5; #declare valores1 = array[linhas1]; #declare valores1[0] = 3; #declare valores1[1] = 8; #declare valores1[2] = 16; #declare valores1[3] = 38; #declare valores1[4] = 42; #declare bits2 = 8; #declare linhas2 = 7; #declare valores2 = array[linhas2]; #declare valores2[0] = 18; #declare valores2[1] = 27; #declare valores2[2] = 80; #declare valores2[3] = 128; #declare valores2[4] = 150; #declare valores2[5] = 201; #declare valores2[6] = 214; #declare SEED = seed(4815162342); union{ object { eixos(10.0) } object { abaco(linhas1, bits1, valores1, 0.15) } object { abaco(linhas2, bits2, valores2, 0.35) translate <0, 100, 0> } } #include "camlight.inc" #declare centro_cena = < 0.00, (10 * max(bits1, bits2)) + 15, (22 * (max(linhas1, linhas2) - 1)) / 2 >; #declare raio_cena = 22 * (linhas1 + linhas2); #declare dir_camera = < 5000.00, (10 * max(bits1, bits2)) + 15, (22 * (max(linhas1, linhas2) - 1)) / 2 >; #declare dist_camera = 22 * (linhas1 + linhas2); #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)