// Last edited on 2023-12-26 15:41:41 by stolfi background{ color rgb < 0.90, 0.80, 0.85 > } #declare tx_fosca_cinza = texture{ pigment{ color rgb < 0.3, 0.3, 0.3 > } finish{ diffuse 0.9 ambient 0.1 } } #declare corpo = box { <-1, -2, -3>, <1, 2, 3> // near lower left corner, far upper right corner } //mudar para o numero de parametros do robo #declare NP = 20; #macro cena(tt) #local NQ = 5; //Número de quadros chave excusive o último #local TQ = array[NP+1] //tempos clock dos quadros chave #local PQ = array[NQ+1]; // Parametros dos quadro-chave #local TQ[0] = 0; #local PQ[0] = empacota() //... #local TQ[1] = 0.2; #local PQ[1] = empacota() #local TQ[2] = 0.4; #local PQ[2] = empacota() #local TQ[3] = 0.6; #local PQ[3] = empacota() #local TQ[4] = 0.8; #local PQ[4] = empacota() #local TQ[5] = 1; #local PQ[5] = empacota() #local k = acha_quadro(tt); //zera as var dos angulos para satisfazer pov-ray #local A0 = 0; #local A1 = 0; #local A2 = 0; #local A3 = 0; #local A4 = 0; #local A5 = 0; interpola_quadros(tt, TQ[k], PQ[k], TQ[k+1], PQ[k+1], A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) #local rob = object{robo(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20)} rob #end #macro empacota(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) #local P[0] = A0; #local P[1] = A1; #local P[2] = A2; #local P[3] = A3; #local P[4] = A4; #local P[5] = A5; #local P[6] = A6; #local P[7] = A7; #local P[8] = A8; #local P[9] = A9; #local P[10] = A10; #local P[11] = A11; #local P[12] = A12; #local P[13] = A13; #local P[14] = A14; #local P[15] = A15; #local P[16] = A16; #local P[17] = A17; #local P[18] = A18; #local P[19] = A19; #local P[20] = A20; P #end #macro acha_quadro(tt, NQ, TQ) #local k = 0; #while (TQ[k] >= tt & TQ[k+1], <-1,-3,-8>, 0.3} #local dedo2 = cylinder{<-1,-1,-8>, <-1,-5,-8>, 0.3} union { object{dedo1 texture{tx_fosca_cinza}} object{dedo2 texture{tx_fosca_cinza}} } #end #macro subPerna(p3,p4) #local quadriceps = cylinder {<-1,-1,-5>, <-1,-1,-8>, 0.5} #local sub = object{pata()} #local juntas = sphere {<-1,-1,-8>, 0.6} union { object{quadriceps texture{tx_fosca_cinza}} object{sub rotate p3*x translate<0,2,0>} object{juntas texture{tx_fosca_cinza}} } #end #macro perna(p1,p2,p3,p4) #local origem = cylinder {<-1,1,-3>, <-1,1,-5>, 0.5} #local sub = object{subPerna(p3,p4)} #local juntas = sphere {<-1,1,-5>, 0.6} union { object{origem texture{tx_fosca_cinza}} object{sub rotate p2*y translate<0,2,0>} object{juntas texture{tx_fosca_cinza}} } #end #macro dedos_braco() #local dedo1 = cylinder{<0,0,0>, <0,1.5,1>, 0.3} #local dedo2 = cylinder{<0,0,0>, <0,2,1>, 0.3} #local dedo3 = cylinder{<0,0,0>, <0,2.5,1>, 0.3} #local dedo4 = cylinder{<0,0,0>, <0,3,1>, 0.3} union { object{dedo1 texture{tx_fosca_cinza}} object{dedo2 texture{tx_fosca_cinza}} object{dedo3 texture{tx_fosca_cinza}} object{dedo4 texture{tx_fosca_cinza}} } #end #macro subbraco(p3,p4) #local triceps = cylinder {<1, 4, 2.5>, <1, 4, 0>, 0.5} #local sub = object{dedos_braco()} #local juntas = sphere {<1, 4, 0>, 0.6} union { object{triceps texture{tx_fosca_cinza}} object{sub rotate p3*x translate<1, 4, 0>} object{juntas texture{tx_fosca_cinza}} } #end #macro braco(p1,p2,p3,p4) #local origem = cylinder {<1, 2, 2.5>, <1, 6, 2.5>, 0.5} #local sub = object{subbraco(p3,p4)} #local juntas = sphere {<1, 6, 2.5>, 0.6} union { object{origem texture{tx_fosca_cinza}} object{sub rotate p2*x translate<0,2,0>} object{juntas texture{tx_fosca_cinza}} } #end #macro cranio() sphere { <0, 0, 0>, 1 } #end #macro subcabeca(c3,c4) #local pescoco2 = cylinder {<0, 0, 0>, <0,0,8>, 0.5} #local juntas = sphere {<0,0,8>, 0.6} #local k = object{cranio()} union { object{pescoco2 texture{tx_fosca_cinza}} object{juntas texture{tx_fosca_cinza}} object{k translate<0,0,8> texture{tx_fosca_cinza}} } #end #macro cabeca(c1,c2,c3,c4) #local pescoco = cylinder {<0, 0, 1.5>, <0, 0, 6>, 0.5} #local sub = object{subcabeca(c3,c4)} #local juntas = sphere {<0, 0, 6>, 0.6} union { object{pescoco texture{tx_fosca_cinza}} object{sub rotate c2*y translate<0, 0, 6>} object{juntas texture{tx_fosca_cinza}} } #end #macro robo(c1,c2,c3,c4, b1,b2,b3,b4,d1,d2,d3,d4, e1,e2,e3,e4, p1,p2,p3,p4) union { object{corpo} object{perna(p1,p2,p3,p4) rotate p1*z } object{perna(p1,p2,p3,p4) rotate p1*z scale<1,-1,1> } object{braco(b1,b2,b3,b4) rotate b1*z } object{braco(b1,b2,b3,b4) rotate b1*z scale<1,-1,1> } object{cabeca(c1,c2,c3,c4)} } #end union { #local c1 = 0; #local c2 = 45*sin(radians(45)*clock*8); #local c3 = 0; #local c4 = 0; #local b1 = 0; #local b2 = 0; #local b3 = 60*sin(radians(45)*clock*8); #local b4 = 0; #local d1 = 0; #local d2 = 0; #local d3 = 0; #local d4 = 0; #local e1 = 0; #local e2 = 0; #local e3 = 0; #local e4 = 0; #local p1 = 0; #local p2 = 0; #local p3 = 0; #local p4 = 0; object{robo(c1,c2,c3,c4, b1,b2,b3,b4,d1,d2,d3,d4, e1,e2,e3,e4, p1,p2,p3,p4) rotate -90*y} } #include "eixos.inc" // object{ eixos(20) } #include "camlight.inc" #declare centro_cena = < -1.00, 0.00, 2.00 >; #declare raio_cena = 17.0; #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)