// ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_gato = texture{ pigment{ color rgb < 0.92, 0.64, 0.51 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_relogio = texture{ pigment{ color rgb < 1.0, 1.0, 1.0 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } // ====================================================================== #macro boneco (oe, od, ce, cd, pe, pd, je, jd, ppe, ppd) union { corpo() object { braco (ce, 0) rotate< 0,oe,0 > translate < 1.1,0,0.8 > } object { braco (cd, 1) rotate< 0,od,0 > translate < 1.1,0,0.8 > scale <-1,1,1 > } object { perna (je,ppe) rotate< 0,pe,0 > translate < 0.3,0,-1.1 > } object { perna (jd,ppd) rotate< 0,pd,0 > translate < 0.3,0,-1.1 > scale <-1,1,1 > } } #end // Corpo e cabeca #macro corpo ( ) union{ object { sphere{ < 0,0,0 >, 0.8 } translate < 0,0,2.3 > texture{ tx_gato } } object { sphere{ < 0,0,0 >, 1.5 } translate < 0,0,0 > texture{ tx_gato } } } #end // Folhas (membros finais sem articulacao) #macro sub_braco ( relogio ) union{ object { sphere{ < 0,0,0 >, 0.25 } translate < 0,0,1.2 > texture{ tx_gato } } object { cylinder{ < 0, 0, 0 >, < 0, 0, 1.2 >, 0.18 } translate < 0,0,0 > texture{ tx_gato } } #if (relogio) object { cylinder{ < 0, 0, 0 >, < 0, 0, 0.2 >, 0.19 } translate < 0,0,0.7 > texture{ tx_relogio } } #end } #end #macro pef ( ) object { box{ < 0,0,0 >, < 1,0.5,0.3 > } translate < 0,-0.25, 0 > texture{ tx_gato } } #end // Demais membros #macro braco ( ang_c, relogio ) union{ object { cylinder{ < 0, 0, 0 >, < 0, 0, 1.2 >, 0.18 } translate < 0,0,0 > texture{ tx_gato } } object { sub_braco(relogio) rotate < 0,ang_c,0 > translate < 0,0,1.2 > } } #end #macro sub_perna ( ang ) union{ object { cylinder{ < 0,0,0 >, < 0,0,1.2 >, 0.18 } translate < 0,0,-1.2 > texture{ tx_gato } } object { pef() rotate < 0,ang,0 > translate < 0,0,-1.5 > } } #end #macro perna (ang_j, ang_p) union{ object { cylinder{ < 0, 0, 0 >, < 0, 0, 1.2 >, 0.18 } translate < 0,0,-1.2 > texture{ tx_gato } } object { sub_perna(ang_p) rotate < 0,ang_j,0 > translate < 0,0,-1.2 > } } #end // Encontra o v com base nas posicoes inicias (f0,v0) e finais (f1, v1) #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 = fase))) #local resp = i; #end #local i = i+1; #end resp #end #macro boneco_dancando(fase) #end #include "eixos.inc" // Aqui está a cena, finalmente: union{ object{ eixos(3.00) } // Declaracao das variaveis #declare NQ = 6; // Numero de quadros #declare tempo = array[NQ]; #declare tempo[0] = 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.0; #declare arg1 = array[NQ]; #declare arg1[0] = 0; #declare arg1[1] = 60; #declare arg1[2] = 60; #declare arg1[3] = 60; #declare arg1[4] = 60; #declare arg1[5] = 0; #declare arg2 = array[NQ]; #declare arg2[0] = 0; #declare arg2[1] = 0; #declare arg2[2] = 260; #declare arg2[3] = 260; #declare arg2[4] = 260; #declare arg2[5] = 0; #declare arg3 = array[NQ]; #declare arg3[0] = 0; #declare arg3[1] = 0; #declare arg3[2] = 0; #declare arg3[3] = 300; #declare arg3[4] = 300; #declare arg3[5] = 0; #declare arg4 = array[NQ]; #declare arg4[0] = 0; #declare arg4[1] = 0; #declare arg4[2] = 0; #declare arg4[3] = 0; #declare arg4[4] = 90; #declare arg4[5] = 0; // (oe, od, ce, cd, pe, pd, je, jd, ppe, ppd) object{ boneco(0,60,0,260,300,0,90,0,0,0) } } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.00 >; #declare raio_cena = 8; #declare dir_camera = < 0.00, 14.00, 0.00 >; #declare dist_camera = 10.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)