// ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_preta = texture{ pigment{ color rgb < 1, 1, 1 > } } #declare tx_vermelha = texture{ pigment{ color rgb < 1.00, 0, 0 > } } #declare tx_fosca = texture{ pigment{ color rgb < 1.00, 0.80, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_verde = texture{ pigment{ color rgb < 0, 1, 0 > } } #declare tx_azul = texture{ pigment{ color rgb < 0, 0, 1.00 > } } #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 // Partes da cena: #declare cilindro = cylinder{ < 0, 0, 0 >, < 0, 0, 2 >, 0.25 texture{ tx_azul } } #declare esfera = sphere{ <0,0,0>, 0.5 texture{ tx_fosca } } #macro bit (valor) #if (valor = 1) union { cylinder{ < 0, 0, 0 >, < 0, 0, 2 >, 0.25 texture{ tx_azul } } sphere{ <0,0,0>, 0.5 translate <0,0,1.5> texture{ tx_fosca } } } #else union { cylinder{ < 0, 0, 0 >, < 0, 0, 2 >, 0.25 texture{ tx_azul } } sphere{ <0,0,0>, 0.5 translate <0,0,0.5> texture{ tx_fosca } } } #end #end #macro fileira (n, valor) union { #local i = 0; #local numero = n; #while(numero != 0) #if (mod(valor,2) = 1) object {bit(1) translate <0, (n/2)-0.5-i, 0>} #else object {bit(0) translate <0, n/2-0.5-i, 0>} #end #local i = i + 1; #local valor = int(valor/2); #local numero = numero - 1; #end } #end #macro abaco (m, n, valores) union { #local i = 0; #local teste = 0; #local loop = m; difference { box{ < -0.75,(-0.5*n)-0.5, (-2*m/2)-0.5 >, <0.75,(0.5*n)+0.5,(2*m/2)+0.5> texture{ tx_azul } } box{ < -0.8,(-0.5*n),(-2*m/2) >, <0.8,(0.5*n),(2*m/2)> texture{ tx_azul } } } #while(loop != 0) object {fileira(n, valores[teste]) translate <0, 0, (2*m/2)-2-i> } #local teste = teste + 1; #local i = i + 2; #local loop = loop - 1; #end } #end #declare valores = array [4] #declare valores[0] = 11; #declare valores[1] = 8; #declare valores[2] = 15; #declare valores[3] = 16; #declare valores1 = array [5] #declare valores1[0] = 20; #declare valores1[1] = 31; #declare valores1[2] = 10; #declare valores1[3] = 5; #declare valores1[4] = 17; union { object{ abaco(4, 6, valores) translate <0, 10, 0>} object{ abaco(5, 7, valores1) translate <0, -10, 0>} } #include "eixos.inc" #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.00 >; #declare raio_cena = 30.0; #declare dir_camera = < 20.00, 0.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)