// Last edited on 2023-12-27 03:43:01 by stolfi background{ color rgb < 0.75, 0.80, 0.95 > } #declare tx_plastico = texture{ pigment{ color rgb < 0.40, 0.70, 1.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_fosca = texture{ pigment{ color rgb < 1.00, 0.80, 0.60 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_espelho = texture{ pigment{ color rgb < 1.00, 1.00, 1.00 > } finish{ diffuse 0.2 reflection 0.7*< 1.00, 1.00, 1.00 > ambient 0.1 } } #declare tx_xadrez = texture{ pigment{ checker color rgb < 0.00, 0.00, 0.00 >, color rgb < 1.00, 1.00, 1.0 > } finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } #declare r_cilindro_maior = 0.5; #declare r_cilindro_menor = 0.3; #declare r_bola = 0.7; #declare NP = 24; #macro cabeca() union{ object{sphere{<0,0,0>, 2 texture{tx_plastico}}} object{sphere{<2,0,0>,0.5 texture{tx_plastico}}} } #end #macro subpescoco(c3,c4) #local osso = cylinder{<0,0,0>,<0,0,3>,r_cilindro_maior texture{tx_plastico}} #local cab = object{cabeca()} #local articulacao = sphere{<0,0,0>, r_bola texture{tx_plastico}} union{ object{osso} object{articulacao translate<0,0,3>} object{cab rotate c4*y rotate c3*z translate <0,0,3>} } #end #macro pescoco(c2,c3,c4) #local osso = cylinder{<0,0,0>,<0,0,2>,r_cilindro_maior texture{tx_plastico}} #local subpesc = object{subpescoco(c3,c4)} #local articulacao = sphere{<0,0,0>, r_bola texture{tx_plastico}} union{ object{articulacao} object{osso} object{articulacao translate<0,0,2>} object{subpesc rotate c2*y translate <0,0,2>} } #end #macro pata() #local dedo1 = cylinder{<0,0,0>,<0,2,0.5>,r_cilindro_menor texture{tx_plastico}} #local dedo2 = cylinder{<0,0,0>,<0,2,0>,r_cilindro_menor texture{tx_plastico}} #local dedo3 = cylinder{<0,0,0>,<0,2,-0.5>,r_cilindro_menor texture{tx_plastico}} union{ object{dedo1} object{dedo2} object{dedo3} } #end #macro subbraco(b3,b4) #local osso = cylinder{<0,0,0>,<0,4,0>,r_cilindro_maior texture{tx_plastico}} #local subpata = object{pata()} #local articulacao = sphere{<0,0,0>, r_bola texture{tx_plastico}} union{ object{osso} object{articulacao translate<0,4,0>} object{subpata rotate b3*x rotate b4*y translate <0,4,0>} } #end #macro braco(b2, b3, b4) #local osso = cylinder{<0,0,0>,<0,4,0>,r_cilindro_maior texture{tx_plastico}} #local sub = object{subbraco(b3,b4)} #local articulacao = sphere{<0,0,0>, r_bola texture{tx_plastico}} union{ object{articulacao} object{osso} object{articulacao translate<0,4,0>} object{sub rotate b2*z translate <0,4,0>} } #end #macro unir_corpo(c1,c2,c3,c4,be11,be111,be12,be13,be14,be21,be211,be22,be23,be24,bd11,bd111,bd12,bd13,bd14,bd21,bd211,bd22,bd23,bd24) union{ object{box{<-1,-2,-5>, <1,2,5> texture{tx_plastico}}} object{braco(bd12,bd13,bd14) rotate bd11*z rotate bd111*y translate<0,2,4>} object{braco(be12,be13,be14) rotate be11*z rotate be111*y scale<+1,-1,+1> translate<0,-2,4>} object{braco(bd22,bd23,bd24) rotate bd21*z rotate bd211*y scale<+1,+1,-1> translate<0,2,-4>} object{braco(be22,be23,be24) rotate be21*z rotate be211*y scale<+1,-1,-1> translate<0,-2,-4>} object{pescoco(c2,c3,c4) rotate c1*y translate<0,0,5>} } #end #macro empacota(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23) //a0 a a23 sao (c1,c2,c3,c4,be11,be111,be12,be13,be14,be21,be211,be22,be23,be24,bd11,bd111,bd12,bd13,bd14,bd21,bd211,bd22,bd23,bd24) na ordem #local P = array[NP]; #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; #local P[21] = a21; #local P[22] = a22; #local P[23] = a23; P #end #macro acha_quadro(tt,NQ,TQ) #local k = 0; #local condition = 0; #while(k < NQ & condition = 0) #local tq0 = TQ[k]; #local tq1 = TQ[k+1]; #if(tt >= tq0 & tt < tq1) #local condition = 1; #else #local k = k + 1; #end #end k #end #macro interpola_quadros(tt,ta,Pa,tb,Pb, a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23) #local s = (tt-ta)/(tb-ta); #declare a0 = (1-s)*Pa[0] + s*Pb[0]; #declare a1 = (1-s)*Pa[1] + s*Pb[1]; #declare a2 = (1-s)*Pa[2] + s*Pb[2]; #declare a3 = (1-s)*Pa[3] + s*Pb[3]; #declare a4 = (1-s)*Pa[4] + s*Pb[4]; #declare a5 = (1-s)*Pa[5] + s*Pb[5]; #declare a6 = (1-s)*Pa[6] + s*Pb[6]; #declare a7 = (1-s)*Pa[7] + s*Pb[7]; #declare a8 = (1-s)*Pa[8] + s*Pb[8]; #declare a9 = (1-s)*Pa[9] + s*Pb[9]; #declare a10 = (1-s)*Pa[10] + s*Pb[10]; #declare a11 = (1-s)*Pa[11] + s*Pb[11]; #declare a12 = (1-s)*Pa[12] + s*Pb[12]; #declare a13 = (1-s)*Pa[13] + s*Pb[13]; #declare a14 = (1-s)*Pa[14] + s*Pb[14]; #declare a15 = (1-s)*Pa[15] + s*Pb[15]; #declare a16 = (1-s)*Pa[16] + s*Pb[16]; #declare a17 = (1-s)*Pa[17] + s*Pb[17]; #declare a18 = (1-s)*Pa[18] + s*Pb[18]; #declare a19 = (1-s)*Pa[19] + s*Pb[19]; #declare a20 = (1-s)*Pa[20] + s*Pb[20]; #declare a21 = (1-s)*Pa[21] + s*Pb[21]; #declare a22 = (1-s)*Pa[22] + s*Pb[22]; #declare a23 = (1-s)*Pa[23] + s*Pb[23]; #end #macro cena(tt) union{ #local NQ = 7; #local TQ = array[NQ+1]; #local PQ = array[NQ+1]; #local TQ[0] = 0.000; #local PQ[0] = empacota(0,0,0,0, -45,0,-90,0,0, -45,0,-90,0,0, -45,0,-90,0,0, -45,0,-90,0,0); #local TQ[1] = 0.143; #local PQ[1] = empacota(0,0,0,0, -45,0,-45,0,0, -45,0,-45,0,0, -45,0,-90,0,0, -45,0,-90,0,0); #local TQ[2] = 0.286; #local PQ[2] = empacota(0,0,0,0, -45,-45,-45,0,0, -45,45,-45,0,0, -45,0,-90,0,0, -45,0,-90,0,0); #local TQ[3] = 0.429; #local PQ[3] = empacota(0,0,0,0, -45,-45,-90,0,0, -45,45,-90,0,0, -45,0,-90,0,0, -45,0,-90,0,0); #local TQ[4] = 0.571; #local PQ[4] = empacota(0,0,0,0, -45,-45,-90,0,0, -45,45,-90,0,0, -45,0,-45,0,0, -45,0,-45,0,0); #local TQ[5] = 0.714; #local PQ[5] = empacota(0,0,0,0, -45,-45,-90,0,0, -45,45,-90,0,0, -45,-45,-45,0,0, -45,45,-45,0,0); #local TQ[6] = 0.857; #local PQ[6] = empacota(0,0,0,0, -45,-45,-90,0,0, -45,45,-90,0,0, -45,-45,-90,0,0, -45,45,-90,0,0); #local TQ[7] = 1.000; #local PQ[7] = empacota(0,0,0,0, -45,0,-90,0,0, -45,0,-90,0,0, -45,0,-90,0,0, -45,0,-90,0,0); #local k = acha_quadro(tt,NQ,TQ); #local a0 = 0; #local a1 = 0; #local a2 = 0; #local a3 = 0; #local a4 = 0; #local a5 = 0; #local a6 = 0; #local a7 = 0; #local a8 = 0; #local a9 = 0; #local a10 = 0; #local a11 = 0; #local a12 = 0; #local a13 = 0; #local a14 = 0; #local a15 = 0; #local a16 = 0; #local a17 = 0; #local a18 = 0; #local a19 = 0; #local a20 = 0; #local a21 = 0; #local a22 = 0; #local a23 = 0; #if(k < 7) 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,a21,a22,a23) #else interpola_quadros(tt, TQ[k], PQ[k], TQ[0], PQ[0],a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23) #end //a0 a a23 sao (c1,c2,c3,c4,be11,be111,be12,be13,be14,be21,be211,be22,be23,be24,bd11,bd111,bd12,bd13,bd14,bd21,bd211,bd22,bd23,bd24) na ordem #local rob = object{unir_corpo(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23) rotate -90*y} rob } #end #include "eixos.inc" #include "galho.inc" #local Lg = 7; // Deslocamento por ciclo -- Prof union{ // object{ eixos(3.00) } #local tt = clock; object{ galho( < -Lg/2, 0, 0>, < +Lg/2, 0, 0>, 1.20, 0) translate 5*z } #local rob = cena(tt); object{rob translate <-Lg*clock,0,0>} } #include "camlight.inc" #declare centro_cena = < -Lg*clock, 0.00, 3.00 >; #declare raio_cena = 14.0; #declare dir_camera = < 300.00, 300.00, 200.00 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)