// 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 #macro ay_chegando(posini, posfini, frac) #end #macro letra_chegando(letra, posini, posfin, frac) text{ ttf "arial.ttf" letra .1 0.0 rotate <90, 0, 90> translate <0, 0, (posfin - posini) * frac>} #end // fase eh como clock, varia de 0 (inicio) ate 1 (fim) // texto = alumnivy #macro logotipo(textologo, fase) #local n = strlen(textologo); #local etapa = int(fase * n); #local frac = fase * n - etapa; union{ text{ttf "arial.ttf" substr(textologo, 1, etapa) .1 0.0 rotate <90, 0, 90> translate <0, 0, -2>} object{letra_chegando(substr(textologo, etapa + 1, 1), 2, 0, frac) translate <0, 0.6*etapa, 0>} } #end #declare texto1 = text{ttf "arial.ttf" "alumnivy" .1 0.0 rotate <90, 0, 90>} #declare texto2 = "alumnivy" #include "eixos.inc" union{ object{ eixos(5.00) } //object { texto } object { logotipo(texto2, clock)} } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.00 >; #declare raio_cena = 7.0; //#declare dir_camera = < 14.00, 7.00, 4.00 >; #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)