// Last edited on DATE TIME by USER // Processed by remove-cam-lights #include "eixos.inc" #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 0.00 >; #declare raio_cena = 30.0; #declare dir_camera = < 0, -4, 4.00 >; #declare dist_camera = 15.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz) background{ color rgb < 0.50, 0.50, 0.50 > } #declare vermelho_fosco = texture { pigment{ color rgb <1.00, 0.00, 0.00>} finish { diffuse 1 specular 0.2 } } #declare verde_fosco = texture { pigment{ color rgb <0.00, 1.00, 0.00>} finish { diffuse 1 specular 0.2 } } #declare azul_fosco = texture { pigment{ color rgb <0.00, 0.00, 1.00>} finish { diffuse 1 specular 0.2 } } #declare branco_fosco = texture { pigment{ color rgb <1.00, 1.00, 1.00>} finish { diffuse 1 specular 0.2 } } #declare azul_fosco = texture { pigment{ color rgb <0.00, 0.00, 1.00>} finish { diffuse 1 specular 0.2 } } #declare cinza_fosco = texture { pigment{ color rgb <0.40, 0.40, 0.40>} finish { diffuse 1 specular 0.2 } } #declare marrom_fosco = texture { pigment{ color rgb <0.60, 0.30, 0.20>} 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 } #declare tx_espelho = texture{ pigment{ color rgb < 1.00, 0.85, 0.30 > } finish{ diffuse 0.2 reflection 0.7*< 1.00, 0.85, 0.30 > ambient 0.1 } } #declare tx_vidro = texture{ pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.70 } finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 } } #declare chao = box{ <-20,-20,-1>, <+20,+20,0> } #macro cabeca(cab) object{ union{ object{ sphere{<0,0,0>,2} } object{ box{ <0.5,1,0.5>, <1,-2.5,1> texture{ verde_fosco } } } object{ box{ <-0.5,1,0.5>, <-1,-2.5,1> texture{ verde_fosco } } } object{ box{ <-0.5,-0.5,-0.5>, <0.5,-4,0.5> texture{ marrom_fosco } } } object{ cylinder{ <0,0,0>,<0,0,-5>,0.5 texture{ verde_fosco } } } }translate <0,0,5> rotate<0,cab,0>} #end #macro mao(bb) object{ box{ <0.5,0.5,0.5>, <-0.5,-0.5,-0.5> texture{ cinza_fosco } translate<0,-0.5,0> } rotate } #end #macro pe(pc) object{ box{ <1,1,0.5>, <-1,-1,-0.5> texture{ tx_xadrez } translate<0,0,-0.5> } rotate } #end #macro tronco(pa1, pb1, pc1, pa2, pb2, pc2, ba1, bb1, ba2, bb2, cab) union{ cylinder{ <0,0,3>,<0,0,-3>,2 texture{ tx_xadrez } } object{ cabeca(cab) translate<0,0,3> } object{ coxa(pa1, pb1, pc1) translate<-1,0,-3> } object{ coxa(pa2, pb2, pc2) translate<1,0,-3> } object{ braco(ba1, bb1) translate<2.5,0,2> } object{ braco(ba2, bb2) translate<-2.5,0,2> } } #end #macro coxa(pa, pb, pc) union{ cylinder{ <0,0,0>, <0,0,-4>, 0.5 texture{ cinza_fosco } } object{ pos_coxa(pb, pc) translate <0,0,-4> } }rotate #end #macro pos_coxa(pb, pc) union{ cylinder{ <0,0,0>, <0,0,-3>, 0.5 } object{ pe(pc) translate <0,0,-3> } }rotate #end #macro braco(ba, bb) union{ cylinder{ <0,0,0>, <0,0,-3>, 0.5 texture{ azul_fosco } } object{ mao(bb) translate <0,0,-3> } rotate } #end #declare NQ = 6; // Numero de quadros #declare arg1 = array[NQ] ; #declare arg1[0] = 0 ; #declare arg1[1] = 0 ; #declare arg1[2] = 0 ; #declare arg1[3] = 80 ; #declare arg1[4] = 0 ; #declare arg1[5] = 0 ; #declare arg2 = array[NQ] ; #declare arg2[0] = 0 ; #declare arg2[1] = 0 ; #declare arg2[2] = 0 ; #declare arg2[3] = 0 ; #declare arg2[4] = 80 ; #declare arg2[5] = 0 ; #declare arg3 = array[NQ] ; #declare arg3[0] = 0 ; #declare arg3[1] = 180 ; #declare arg3[2] = 0 ; #declare arg3[3] = 0 ; #declare arg3[4] = 0 ; #declare arg3[5] = 0 ; #declare arg4 = array[NQ] ; #declare arg4[0] = 0 ; #declare arg4[1] = 0 ; #declare arg4[2] = 180 ; #declare arg4[3] = 180 ; #declare arg4[4] = 180 ; #declare arg4[5] = 0 ; #declare tempo = array[NQ] ; #declare tempo[0] = 0 ; #declare tempo[1] = 0.2 ; #declare tempo[2] = 0.4 ; #declare tempo[3] = 0.6 ; #declare tempo[4] = 0.8 ; #declare tempo[5] = 1 ; #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 < (NQ-1) ) #if (( tempo[i] <= fase ) & ( tempo[i+1] >= fase )) #local resp = i; #end #local i = i + 1; #end resp #end #macro boneco_danca( fase ) #local quadro = quadro_anterior(fase); union { object{ tronco( interpola(tempo[quadro],arg1[quadro],tempo[quadro+1],arg1[quadro+1],fase), 0,0, interpola(tempo[quadro],arg2[quadro],tempo[quadro+1],arg2[quadro+1],fase), 0,0, interpola(tempo[quadro],arg3[quadro],tempo[quadro+1],arg3[quadro+1],fase),0, interpola(tempo[quadro],arg4[quadro],tempo[quadro+1],arg4[quadro+1],fase), 0,0) } } #end union { object { boneco_danca(clock) } }