// ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.5, 0.5, 0.5 > } #declare branco = texture{ pigment{ color rgb < 1 1 1 > } finish{ diffuse 0.9 ambient 0.1 } } #declare preto = texture{ pigment{ color rgb < 0 0 0 > } finish{ diffuse 0.9 ambient 0.1 } } // ====================================================================== // DESCRI��O DA CENA #declare NP=20; #declare corpo = box{ <-5,-5,-5>,<5,5,5> texture{branco} } #declare cilindro = cylinder{ <0,0,0>,<0,0,5>,1 texture{preto} } #declare cilindro2 = cylinder{ <0,0,0>,<0,0,10>,1 texture{preto} } #declare pe = sphere{ <0,0,0>,1.5 texture{branco} } #declare cabeca= sphere{ <0,0,0>,3 texture{branco} } #macro pata(a1) object{ union{ object{cilindro translate<0,0,-5>} object{pe translate<0,0,-5>} } rotate a1*y} #end #macro coxa(a1,a2) object{ union{ object{cilindro translate<0,0,-5>} object{pata(a2) translate<0,0,-5>} } rotate a1*y } #end #macro perna(a1,a2,a3,a4) object{ union{ object{cilindro translate<0,0,-5>} object{coxa(a3,a4) translate<0,0,-5>} } rotate a1*y rotate a2*z } #end #macro cranio(a1) object{ union{ object{cilindro2 } object{cabeca translate<0,0,10>} } rotate a1*y} #end #macro pescoco(a1,a2) object{ union{ object{cilindro } object{cranio(a2) translate<0,0,5>} } rotate a1*y } #end #macro nuca(a1,a2,a3,a4) object{ union{ object{cilindro } object{pescoco(a3,a4) translate<0,0,5>} } rotate a1*y rotate a2*z } #end #macro preguica(P1,P2,P3,P4,C) // vetores Pn para as pernas com quatro elementos cada representando os angulos definidos no macro perna(), idem para o vetor C representando a cabeça union{ object{corpo} object{perna(P1[0],P1[1],P1[2],P1[3]) translate<-5,-5,-5>} object{perna(P2[0],P2[1],P2[2],P2[3]) translate<-5,5,-5>} object{perna(P3[0],P3[1],P3[2],P3[3]) translate<5,-5,-5>} object{perna(P4[0],P4[1],P4[2],P4[3]) translate<5,5,-5>} object{nuca(C[0],C[1],C[2],C[3]) translate<0,0,5>} } #end #macro pos1(tt) #local P1=array[4] {90+45*tt/0.125,0,-90*tt/0.125,-45*tt/0.125}; #local P2=array[4] {90+45*tt/0.125,0,-90*tt/0.125,-45*tt/0.125}; #local P3=array[4] {90+45*tt/0.125,180,-90*tt/0.125,-45*tt/0.125}; #local P4=array[4] {90+45*tt/0.125,180,-90*tt/0.125,-45*tt/0.125}; #local C=array[4] {90-90*tt/0.125,90,90,45*tt/0.125} preguica(P1,P2,P3,P4,C) #end #macro pos2(tt) #local P1=array[4] {135,0,-90+45*(tt-0.125)/0.125,45-90*(tt-0.125)/0.125}; #local P2=array[4] {135,0,-90+45*(tt-0.125)/0.125,45-90*(tt-0.125)/0.125}; #local P3=array[4] {135,180,-90+45*(tt-0.125)/0.125,45-90*(tt-0.125)/0.125}; #local P4=array[4] {135,180,-90+45*(tt-0.125)/0.125,45-90*(tt-0.125)/0.125}; #local C=array[4] {0,90,90,45-45*(tt-0.125)/0.125} preguica(P1,P2,P3,P4,C) #end #macro pos3(tt) #local P1=array[4] {135-45*(tt-0.25)/0.125,0,-45,-45}; #local P2=array[4] {135-45*(tt-0.25)/0.125,0,-45,-45}; #local P3=array[4] {135-45*(tt-0.25)/0.125,180,-45,-45}; #local P4=array[4] {135-45*(tt-0.25)/0.125,180,-45,-45}; #local C=array[4] {0,90,90-45*(tt-0.25)/0.125,45*(tt-0.25)/0.125} preguica(P1,P2,P3,P4,C) #end #macro pos4(tt) #local P1=array[4] {90-90*(tt-0.375)/0.125,0,-45+45*(tt-0.375)/0.125,-45+45*(tt-0.375)/0.125}; #local P2=array[4] {90-90*(tt-0.375)/0.125,0,-45+45*(tt-0.375)/0.125,-45+45*(tt-0.375)/0.125}; #local P3=array[4] {90-90*(tt-0.375)/0.125,180,-45+45*(tt-0.375)/0.125,-45+45*(tt-0.375)/0.125}; #local P4=array[4] {90-90*(tt-0.375)/0.125,180,-45+45*(tt-0.375)/0.125,-45+45*(tt-0.375)/0.125}; #local C=array[4] {0,90,45-45*(tt-0.375)/0.125,45-45*(tt-0.375)/0.125} preguica(P1,P2,P3,P4,C) #end // #macro pos5(tt) // #local P1=array[4] {0,0,0,0}; // #local P2=array[4] {0,0,0,0}; // #local P3=array[4] {0,180,0,0}; // #local P4=array[4] {0,180,0,0}; // #local C=array[4] {0,90,0,0} // preguica(P1,P2,P3,P4,C) // #end #macro empacota(A0,A1,A2,A3,A4) #local P=array[NP]; #local P[0]=A0[0]; #local P[1]=A0[1]; #local P[2]=A0[2]; #local P[3]=A0[3]; #local P[4]=A1[0]; #local P[5]=A1[1]; #local P[6]=A1[2]; #local P[7]=A1[3]; #local P[8]=A2[0]; #local P[9]=A2[1]; #local P[10]=A2[2]; #local P[11]=A2[3]; #local P[12]=A3[0]; #local P[13]=A3[1]; #local P[14]=A3[2]; #local P[15]=A3[3]; #local P[16]=A4[0]; #local P[17]=A4[1]; #local P[18]=A4[2]; #local P[19]=A4[3]; P #end #macro acha_quadro(tt,NQ,TQ) #local cont=0; #local i=0; #while(tt>cont) #local i=i+1; #local cont=TQ[i]; #end i #end #macro interpola_quadros(tt,ta,Pa,tb,Pb,A0,A1,A2,A3) #local s=(tt-ta)/(tb-ta); #declare A0=array[4] {(1-s)*Pa[0]+s*Pb[0],(1-s)*Pa[1]+s*Pb[1],(1-s)*Pa[2]+s*Pb[2],(1-s)*Pa[3]+s*Pb[3]}; #declare A1=array[4] {(1-s)*Pa[4]+s*Pb[4],(1-s)*Pa[5]+s*Pb[5],(1-s)*Pa[6]+s*Pb[6],(1-s)*Pa[7]+s*Pb[7]}; #declare A2=array[4] {(1-s)*Pa[8]+s*Pb[8],(1-s)*Pa[9]+s*Pb[9],(1-s)*Pa[10]+s*Pb[10],(1-s)*Pa[11]+s*Pb[11]}; #declare A3=array[4] {(1-s)*Pa[12]+s*Pb[12],(1-s)*Pa[13]+s*Pb[13],(1-s)*Pa[14]+s*Pb[14],(1-s)*Pa[15]+s*Pb[15]}; #declare A1=array[4] {(1-s)*Pa[16]+s*Pb[16],(1-s)*Pa[17]+s*Pb[17],(1-s)*Pa[18]+s*Pb[18],(1-s)*Pa[19]+s*Pb[19]}; #end #macro cena(tt) #local NQ=6; #local TQ=array[NQ+1]; #local PQ=array[NQ+1]; #local TQ[0]=0.00; // #local PQ[0]=empacota(/* inserir angulos do quadro 0*/ ) #local TQ[1]=0.16; // #local PQ[1]=empacota(/* inserir angulos do quadro 1*/ ) #local TQ[2]=0.32; // #local PQ[2]=empacota(/* inserir angulos do quadro 2*/ ) #local TQ[3]=0.48; // #local PQ[3]=empacota(/* inserir angulos do quadro 3*/ ) #local TQ[4]=0.64; // #local PQ[4]=empacota(/* inserir angulos do quadro 4*/ ) #local TQ[5]=0.80; // #local PQ[5]=empacota(/* inserir angulos do quadro 5*/ ) #local TQ[6]=1.00; // #local PQ[6]=empacota(/* inserir angulos do quadro 0*/ ) #local k=acha_quadro(tt,NQ,TQ); #local A0=array[4] {0,0,0,0}; #local A1=array[4] {0,0,0,0}; #local A3=array[4] {0,0,0,0}; #local A3=array[4] {0,0,0,0}; #local A4=array[4] {0,0,0,0}; // interpola_quadros(tt,TQ[k],PQ[k],TQ[k+1],PQ[k+1],A0,A1,A2,A3,A4) // #local rob=object{preguica(A0,A1,A2,A3,A4)}; // rob #end #include "eixos.inc" //Aqui est� a cena, finalmente: cena(clock) #include "camlight.inc" #declare centro_cena = < 0 ,0, -3>; #declare raio_cena = 30; #declare dir_camera = < 2, 2, 2>; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)