// Last edited on DATE TIME by USER // Processed by remove-cam-lights background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_tronco = texture{ pigment{ color rgb < 0.85, 0.50, 0.30 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_certo = texture{ pigment{ color rgb < 0.15, 0.40, 0.15 > } finish{ diffuse 0.9 ambient 0.8 } } #declare tx_erro = texture{ pigment{ color rgb < 0.60, 0.1, 0.1 >} finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } #declare bits = 7; #declare linhas = 5; #declare valores = array[linhas]; #declare valores[0] = (1-clock)*13 + clock*19; #declare valores[1] = (1-clock)*7 + clock*21; #declare valores[2] = (1-clock)*2 + clock*5; #declare valores[3] = (1-clock)*7 + clock*11; #declare valores[4] = (1-clock)*1 + clock*3; #declare semente = seed(19652472); #declare raio_bol = 4; #declare prob_erro = 0.2; #macro bolinha(raio) sphere { <0, 0, 0>, raio } #end #macro cilindro(tamanho, raio) cylinder { <0, 0, 0>, <0, 0, tamanho>, raio } #end #macro bit(b, d) //posicao é um valor entre 0 e 1, sendo que a logica se inverte para com defeito union { object { cilindro(22, 1) texture { tx_tronco } } #if (b*22 > 11.0) #local pos = b*22 - raio_bol; #else #local pos = b*22 + raio_bol; #end #if(d = 0) object { bolinha(raio_bol) translate <0,0, pos> texture { tx_certo } } #else object { bolinha(raio_bol) translate <0,0,pos> texture { tx_erro } } #end translate <0, 0, -10> rotate <0, d * 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 r = int(numero); #local f = numero - r; #local i = 0; #while (i < bits) #local s = rand(semente); #if (s < prob) #local d = 1; #else #local d = 0; #end #local vv = mod(r,2); #if (vv = 0) #local b = f; #local f = 0; #else #local b = 1-f; #end object { bit(b, d) translate <0, (i * 10) + 4, 0> } #local r = int(r/2); #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" union{ object { eixos(3.0) } object { abaco(linhas, bits, valores, prob_erro) } } #include "camlight.inc" #declare centro_cena = < 0.00, 90.00, 60.00 >; #declare raio_cena = 110.00; #declare dir_camera = < (1-clock)*100.00 + (clock*(1800)), 200.00, 80.00 >; #declare dist_camera = 130.00; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)