// Last edited on 2023-12-27 03:30:27 by stolfi background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_robo = texture{ pigment{ color rgb 2*< 0.25, 0.16, 0.16 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_membros = texture{ pigment{ color rgb 2*< 0.10, 0.25, 0.16 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_submembros = texture{ pigment{ color rgb 2*< 0.15, 0.15, 0.35 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_pata = texture{ pigment{ color rgb 2*< 0.3, 0.3, 0.3 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_cabeca = texture{ pigment{ color rgb < 0.8, 0.2, 0.4 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_galho = texture{ pigment { color rgb <0.5, 0.2, 0.1>} finish{ diffuse 0.9 ambient 0.1 } } // Objetos #declare chao = box{ <-100,-100,-1>, <+100,+100,0> } // Macros #macro dedos_mao(origem) union{ cylinder { origem, origem + <0, 2, 0>, 0.5 } cylinder { origem, origem + <1, 2, 0>, 0.5 } cylinder { origem, origem + <-1, 2, 0>, 0.5 } } #end #macro pata(origem) union{ sphere { origem + <0, 1, 0>, 1 } dedos_mao(origem+<0, 2, 0>) } #end #macro antebraco(origem, ang_3) union { cylinder { origem, origem + <0, 3, 0>, 1 texture {tx_submembros} } object{ pata(<0, 0, 0>) rotate<0, 0, ang_3> translate origem+<0, 3, 0> // se a origem do antebraco = `origem`, entao origem da mao sera origem + 3 (fim do antebraco) texture {tx_pata} } } #end #macro braco(origem, ang_2, ang_3) union { cylinder { origem, origem + <0, 4, 0>, 1 texture {tx_membros} } object { antebraco(<0, 0, 0>, ang_3) rotate translate origem + <0, 4, 0> } } #end #macro cabeca(origem) union { sphere { origem + <0, 0, 2.5>, 2.5 } sphere { origem + <2.5, 0, 2.5>, 0.5 } } #end #macro subpescoco(origem, ang_3, ang_4) union { cylinder { origem, origem + <0, 0, 1>, 1.5 texture {tx_submembros} } object{ cabeca(<0, 0, 0>) rotate translate origem+<0, 0, 1> texture {tx_cabeca} } } #end #macro pescoco(origem, ang_2, ang_3, ang_4) union { cylinder { origem, origem + <0, 0, 1>, 1.5 texture {tx_membros} } object { subpescoco(<0, 0, 0>, ang_3, ang_4) rotate translate origem + <0, 0, 1> } } #end #macro robo(E11, E12, E13, E14, D11, D12, D13, D14, E21, E22, E23, E24, D21, D22, D23, D24, P1, P2, P3, P4) union { cylinder { <0, 0, 0>, <0, 0, 12>, 3 texture {tx_robo} } object { braco(<0, 0, 0>, E13, E14) rotate translate<0, 3, 11> } object { braco(<0, 0, 0>, D13, D14) rotate translate<0, 3, 11> scale <1, -1, 1> } object { braco(<0, 0, 0>, E23, E24) rotate translate<0, 3, 0> } object { braco(<0, 0, 0>, D23, D24) rotate translate<0, 3, 0> scale <1, -1, 1> } object{ pescoco(<0, 0, 0>, P2, P3, P4) rotate<0, P1, 0> translate<0, 0, 12> } } #end #declare NP = 21; // total parametros do robo #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 = 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; P #end #macro acha_quadro(tt) #local ret = tt * 10; #if(tt >= 1.0) #local ret = 9; // {0} --> {9} -- Prof #end ret #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) #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]; #end #include "galho.inc" #local Lg = 5; // Deslocamento por ciclo -- Prof #macro cena(tt) #local NQ = 10; // total quadros-chave #local TQ = array[NQ+1]; // tempos (0.0, 0.1, 0.2, 0.3, ... , 1.0) de cada quadro chave #local PQ = array[NQ+1]; // parametros dos quadros-cahve #local TQ[0] = 0.000; #local PQ[0] = empacota(30, -75, 0, -75, 15, -75, 0, -75, -30, -75, 0, -75, -10, -75, 0, -75, 0, 0, 0, 0, 0) #local TQ[1] = 0.100; #local PQ[1] = empacota(30, -75, 0, -75, 15, -45, 0, 0, -30, -75, 0, -75, -10, -75, 0, -75, 0, 0, 0, 0, 0) #local TQ[2] = 0.200; #local PQ[2] = empacota(30, -75, 0, -75, 45, -45, 0, 0, -30, -75, 0, -75, -10, -75, 0, -75, 0, 0, 0, 0, 0) #local TQ[3] = 0.300; #local PQ[3] = empacota(30, -75, 0, -75, 45, -75, 0, -45, -30, -75, 0, -75, -10, -45, 0, 0, 0, 0, 0, 0, 0) #local TQ[4] = 0.400; #local PQ[4] = empacota(30, -75, 0, -75, 45, -75, 0, -45, -30, -75, 0, -75, 20, -45, 0, 0, 0, 0, 0, 0, 0) #local TQ[5] = 0.500; #local PQ[5] = empacota(30, -45, 0, 0, 45, -75, 0, -45, -30, -75, 0, -75, 20, -75, 0, -45, 0, 0, 0, 0, 0) #local TQ[6] = 0.600; #local PQ[6] = empacota(60, -45, 0, 0, 45, -75, 0, -45, -30, -75, 0, -75, 20, -75, 0, -45, 0, 0, 0, 0, 0) #local TQ[7] = 0.700; #local PQ[7] = empacota(60, -75, 0, -45, 45, -75, 0, -45, -30, -45, 0, 0, 20, -75, 0, -45, 0, 0, 0, 0, 0) #local TQ[8] = 0.800; #local PQ[8] = empacota(60, -75, 0, -45, 45, -75, 0, -45, 0, -45, 0, 0, 20, -75, 0, -45, 0, 0, 0, 0, 0) #local TQ[9] = 0.900; #local PQ[9] = empacota(60, -75, 0, -45, 45, -75, 0, -45, 0, -75, 0, -45, 20, -75, 0, -45, 0, 0, 0, 0, 5) #local TQ[NQ] = 1.000; #local PQ[NQ] = empacota(30, -75, 0, -75, 15, -75, 0, -75, -30, -75, 0, -75, -10, -75, 0, -75, 0, 0, 0, 0, 5) #local k = acha_quadro(tt); #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; 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) translate<0, 0, A20> } #local gal = object{ galho (< 6, 0, -Lg/2>, < 6, 0, +Lg/2 >, 1, 0) } union{ object{ rob } object{ gal } } #end #include "eixos.inc" // object{ eixos(10) } object { cena(clock) rotate -90*y } #include "camlight.inc" #declare centro_cena = < -6.00, 0.00, 3.50 > - Lg*clock*x; // Prof #declare raio_cena = 23.0; #declare dir_camera = < 0, 7.00, 3.00 >; #declare dist_camera = 6*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)