// ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_branco = texture{ pigment{ color rgb < 1, 1, 1 > } } #declare tx_fosca_marrom = texture{ pigment{ color rgb < 0.361, 0.2, 0.09 > } } #declare tx_verde = texture{ pigment{ color rgb < 0.10, 0.62, 0.10 >} finish{ diffuse 0.9 ambient 0.5 } } //Constantes #declare desloca_bitN = 3; #declare desloca_bitM = 5; //array #declare valores = array[10] #declare valores[0] = 0; #declare valores[1] = 1; #declare valores[2] = 2; #declare valores[3] = 3; #declare valores[4] = 4; #declare valores[5] = 5; #declare valores[6] = 6; #declare valores[7] = 7; #declare valores[8] = 8; #declare valores[9] = 9; // ====================================================================== // DESCRIÇÃO DA CENA // Partes da cena: #macro abaco(m,n,valores, prob) #declare roleta = seed(417); union{ object {caixa(m*desloca_bitM+1, n*desloca_bitN+1)} #while (m>=1) object {linha(n, valores[m-1], prob, roleta) translate <0, 0, m*desloca_bitM-1> } #local m = m-1; #end } #end #macro linha (n, valor, prob, roleta) union { #local i = n; #while (i>=1) object {bit(mod(valor,2), (rand(roleta) translate <0,desloca_bitN*i,1> } #local i = i-1; #local valor = int(valor/2); #end } #end #macro caixa(tamanho_abacoM, tamanho_abacoN) union{ //fundo object { box { <0,0,0>, <2,tamanho_abacoN,tamanho_abacoM> }}//texture {tx_fosca_marrom}}} //bordas object { box { <-1,-1,-1>, <3,tamanho_abacoN+1,0> texture {tx_fosca_marrom}}} //baixo object { box { <-1,-1,-1>, <3,0,tamanho_abacoM+1> texture {tx_fosca_marrom}}} //esquerda object { box { <-1,tamanho_abacoN+1,tamanho_abacoM+1>,<3,-1,tamanho_abacoM> texture {tx_fosca_marrom}}} //cima object { box { <-1,tamanho_abacoN+1,tamanho_abacoM+1>,<3,tamanho_abacoN,-1> texture {tx_fosca_marrom}}} //direita } #end #macro bit (valor, defeito) #if (defeito=1) #local valorLocal = mod (valor+1,2); #else #local valorLocal = valor; #end union { object { box{ <0,0,0>, < 1,2,4> texture{ tx_branco } } } object { box{ <0,0,0>, < 2,1,0.5> translate <0.9,0,0> rotate <0,-90*valorLocal+45,0> translate <0,0.5,1.75> texture{ tx_verde } } } } #end #include "eixos.inc" // Aqui está a cena, finalmente: union { //Se correto, o abaco mostra de baixo para cima, em binário, os valores 0,1,2,3...9 //abaco sem defeito - direita object {abaco(10,5,valores, 0)} //abaco com defeitos - esquerda object {abaco(10,5,valores, 0.1) translate <0,-25,0>} } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 25.00 >; #declare raio_cena = 60.0; #declare dir_camera = < 1.00, .00, .00 >; #declare dist_camera = 160.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)