// CORES E TEXTURAS #include "colors.inc" background{ color Quartz } // DESCRICAO DA CENA #declare roleta = seed(417); #macro moldura(m,n) box{ <0,0,-0.3> <-m,n,0> pigment{ Black } } #end #declare botao_up = union{ cylinder{ <0,0,0>, <0,0,0.8>, 0.35 pigment{ Red } } sphere{ <0,0,0> 0.45 pigment{ Green } } } #declare botao_down = union{ cylinder{ <0,0,0>, <0,0,0.5>, 0.35 pigment{ Blue } } sphere{ <0,0,0> 0.45 pigment{ Green } } } #declare botao_erro = union{ cylinder{ <0,0,0>, <0,0,1>, 0.35 pigment{ Yellow } } sphere{ <0,0,0> 0.45 pigment{ Green } } } #declare valores = array[10]; #declare valores[0] = 2; #declare valores[1] = 4; #declare valores[2] = 6; #declare valores[3] = 8; #declare valores[4] = 10; #declare valores[5] = 12; #declare valores[6] = 14; #declare valores[7] = 16; #declare valores[8] = 18; #declare valores[9] = 20; #macro bit(valor, def) #if (def > 0) object{ botao_erro } #else #if (valor > 0) object{ botao_up } #else object{ botao_down } #end #end #end #macro fileira(n, valor, prob) #local j = n-1; #local valor_aux = valor; union{ #while(j >= 0) #local def = (rand(roleta) < prob); object{ bit(mod(valor_aux,2), def) translate<-j,0,0> } #local valor_aux = int(valor_aux/2); #local j = j - 1; #end } #end #macro abaco(m, n, valor, prob) #local i = 0; union{ #while(i < m) object{ fileira(n, valor[i], prob) translate<0,i,0> } #local i = i + 1; #end object{ moldura(n, m) translate<0.5,-0.5,0> } } #end // CENA union { object{ abaco(10,6,valores, 0.10) translate<10,-4,0> } object{ abaco(10,10,valores, 0.10) translate<-3,-4,0> } } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 0.00 >; #declare raio_cena = 20.0; #declare dir_camera = <0.00, 0.01, 10.00 >; #declare dist_camera = 20.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)