/* Feito por Andre Cesarino, RA 041939.*/ #include "eixos.inc" #include "camlight.inc" #declare centro_cena = < 10.00, 10.00, +3.00 >; #declare raio_cena = 30.0; #declare dir_camera = < -1.00, 10.00, 3.00 >; #declare dist_camera = 30.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz) /* CORES E TEXTURAS*/ background{ color rgb < 0.50, 0.50, 0.50 > } #declare cinza_brilhante = texture { pigment{ color rgb <0.50, 0.50, 0.50>} finish { diffuse 1 specular 0.5} } #declare vermelho_fosco = texture { pigment{ color rgb <1.00, 0.00, 0.00>} finish { diffuse 1 specular 0.2 } } #declare amarelo_fosco = texture { pigment{ color rgb <1.00, 1.00, 0.00>} finish { diffuse 1 specular 0.2 } } #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 } /* DESCRICAO DA CENA */ #declare chao = box{ <-100,-100,-1>, <+100,+100,0>} #declare num_quadros = 9; //#declare tempo = array[num_quadros] {0.0, 0.125, 0.250, 0.375, 0.500, 0.625, 0.750, 0.825, 1.000}; // #macro interpola (f0,v0,f1,v1,f) // #local ss = (f-f0)/(f1-f0); // #local rr = 1 - ss; // (rr*v0 + ss*v1) // #end // // #macro quadro_anterior(fase) // #local i=0; // #while (i < (num_quadros-1)) // #if ((tempo[i] <= fase) & ((i = num_quadros-1) | (tempo[i+1] >= fase))) // #local resp = i; // #end // #local i=i+1; // #end // resp // // #end // #macro braco (tamanho,pos_braco,ang_y_braco,ang_x_braco,ang_antebraco) // union // { // sphere{<0,0,0>,tamanho/4 texture {branco_fosco}} // cone {<0,0,0>,tamanho/7,<0,0,-tamanho>,tamanho/10 texture {branco_fosco}} // // object{antebraco (tamanho,ang_antebraco) } // rotate ang_y_braco*y // rotate ang_x_braco*x // translate <0,tamanho/5,2*tamanho> // translate // } // #end #declare roleta = seed(313); #macro bit(ligado,pos_bit) #declare defeito = (rand(roleta) < prob); #if (defeito = 1) sphere{<1.5,0,0>,1 texture{vermelho_fosco}} #else #if(ligado = 0) sphere{<0,0,0>,1 texture{cinza_brilhante}} #else sphere{<1,0,0>,1 texture{amarelo_fosco}} #end #end translate pos_bit #end #macro fileira(valor,pos_fileira) #declare vet_ligado = array[6]; #declare vet_ligado[0] = mod(valor,2); #local valor = int(valor/2); #declare vet_ligado[1] = mod(valor,2); #local valor = int(valor/2); #declare vet_ligado[2] = mod(valor,2); #local valor = int(valor/2); #declare vet_ligado[3] = mod(valor,2); #local valor = int(valor/2); #declare vet_ligado[4] = mod(valor,2); #local valor = int(valor/2); #declare vet_ligado[5] = mod(valor,2); union { cylinder{<0,0,1>,<20,0,1>, 0.3 texture{cinza_brilhante}} object{ bit(vet_ligado[5],<16,0,1>)} object{ bit(vet_ligado[4],<13,0,1>)} object{ bit(vet_ligado[3],<10,0,1>)} object{ bit(vet_ligado[2],<7,0,1>)} object{ bit(vet_ligado[1],<4,0,1>)} object{ bit(vet_ligado[0],<1,0,1>)} translate pos_fileira } #end #macro abaco (prob) union { //A estrutura do ábaco, de <0,0,0> a <22,2,20> box{< 0,0,0> , <22,2, 2> texture{cinza_brilhante}} box{<20,0,2> , <22,2,20> texture{cinza_brilhante}} box{<22,2,20>, <0,0,18> texture{cinza_brilhante}} box{<0,0,0> , <2,2,20> texture{cinza_brilhante}} object{fileira(0,<2,0,2>)} object{fileira(1,<2,0,4>)} object{fileira(2,<2,0,6>)} object{fileira(3,<2,0,8>)} object{fileira(14,<2,0,10>)} object{fileira(16,<2,0,12>)} object{fileira(32,<2,0,14>)} object{fileira(63,<2,0,16>)} } #end /*Aqui comeca a cena. */ union { object{ eixos(3.00) } object{ chao translate < 0,0,-5> texture {tx_xadrez}} object{ abaco(0.1)} }