// 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_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_fosca = texture{ pigment{ color rgb < 1.00, 0.80, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_espelho = texture{ pigment{ color rgb < 1.00, 0.85, 0.30 > } finish{ diffuse 0.2 reflection 0.7*< 1.00, 0.85, 0.30 > ambient 0.1 } } #declare tx_vidro = texture{ pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.70 } finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 } } #declare tx_verde = texture{ pigment{ color rgb < 0, 1, 0 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_xadrez = texture{ pigment{ checker color rgb < 0.10, 0.32, 0.60 >, color rgb < 1.00, 0.97, 0.90 > } finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } // ====================================================================== // DESCRIÇÃO DA CENA #declare quantos_abacos = 5; #declare tamanho = 1; #declare espaco = 0.1; #declare quantos_valores = 2; #declare valores = array[quantos_valores]; #declare valores[0] = 31; #declare valores[1] = 0; #declare valores2 = array[quantos_valores]; #declare valores2[0] = 31; #declare valores2[1] = 0; #declare roleta = seed(417); // gerador aleatorio #macro bola() cylinder { <0,0,0>, <0,0,tamanho>, tamanho/2 texture{ tx_fosca } } #end #macro bastao(bit, defeito) union { cylinder { <0,0,0>, <0,0, espaco + tamanho + espaco + tamanho + espaco>, tamanho/5 texture{ tx_plastico } } #if(defeito = 1) #if(bit = 0) #local bit = 1; #else #local bit = 0; #end #end #if(bit = 0) object{ bola() translate <0, 0, espaco>} #else object{ bola() translate <0, 0, tamanho + espaco>} #end } #end #macro fileira(quantos_bits, valor_decimal, prob) union { #local indice = 0; #local valor = valor_decimal; #while(indice < quantos_bits) #local bit_atual = mod(valor, 2); #local valor = int(valor/2); #local defeito = (rand(roleta) < prob); object{ bastao(bit_atual, defeito) translate <0, -(indice * (tamanho + espaco)), 0> } #local indice = indice + 1; #end } #end #macro moldura(numero_bits) difference { box { , <-(tamanho/2 + espaco), tamanho + espaco + tamanho/2, 3 * (tamanho + espaco)> texture {tx_fosca} } box { <2 * tamanho, -(numero_bits * (tamanho + espaco) - tamanho/2), 0>, <-(2 * tamanho), tamanho/2 + espaco, 2 * tamanho + 3 * espaco> texture {tx_fosca} } } #end // um unico abaco #macro abaco(valor_decimal, numero_bits, prob) union { object { fileira(numero_bits, valor_decimal, prob) } object { moldura(numero_bits) } } #end // todos os abacos juntos #macro quadro(numero_abacos, numero_bits, valores, prob) union { #local indice = 0; #while(indice < numero_abacos) object { abaco(valores[indice], numero_bits, prob) translate <0, 0, indice * (4 * tamanho + 3 * espaco)> } #local indice = indice + 1; #end } #end #include "eixos.inc" union{ object{ eixos(5.00) } //object { bola() } //object { bastao(0) } //object{ fileira(numero_bits, 7) } //object{ moldura() } //object { abaco(10) } object { quadro(2, 5, valores, 0) } object { quadro(2, 5, valores, 0.5) translate <0, tamanho * (5 + 2) + (5 + 1) * espaco + espaco, 0> } } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.00 >; #declare raio_cena = 15.0; #declare dir_camera = < 14.00, 7.00, 4.00 >; #declare dist_camera = 16.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)