// Last edited on 2023-12-25 09:30:22 by stolfi 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.700, 0.700, 0.700 > } finish{ diffuse 0.9 ambient 0.1 } } #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 cena(tt) #local time=tt; #if(tt>=0.5) #local time=1-tt; #end #if(time<0.125) pos1(time) #end #if(time<0.250 & time>=0.125) pos2(time) #end #if(time<0.375 & time>=0.250) pos3(time) #end #if(time<=0.5 & time>=0.375) pos4(time) #end #end #include "eixos.inc" // object{ eixos(10) } cena(clock) #include "camlight.inc" #declare centro_cena = < 0 ,0, 3 >; #declare raio_cena = 38; #declare dir_camera = < 7, 5, 3 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)