// Last edited on 2023-12-27 03:46:07 by stolfi #include "camlight.inc" #include "eixos.inc" #include "textures.inc" #include "objs.inc" #declare raio = 1.000; #declare PI = 3.14159; #declare space = 2.000; #macro braco(b3, b4) union { #local sub = object { antebraco(b4) } object{ toco } object{ sub rotate <0, b3, 0> translate <0, 0, 2> } } #end #macro antebraco(b4) union { #local sub = object { mao() } object{ toco } object{ sub rotate <0, b4, 0> translate <0, 0, 2> } } #end #macro mao() object{ palma } #end #macro pescoco(b3, b4) union { #local sub = object { nuca(b4) } object{ toco } object{ sub rotate translate <0, 0, 2> } } #end #macro nuca(b4) union { #local sub = object { m_cabeca() } object{ toco } object{ sub rotate <0, b4, 0> translate <0, 0, 2> } } #end #macro m_cabeca() object{ cabeca } #end #macro bicho(b01, b02, b03, b04, b11, b12, b13, b14, b21, b22, b23, b24, b31, b32, b33, b34, p1, p2, p3, p4) union { object { corpo translate <0, 0, 2> } object { braco(b03, b04) rotate translate < -2.0 , 2.00, 2.5 > } object { braco(b13, b14) rotate scale <-1, 1, 1> translate < 2.0 , 2.00, 2.5 > } object { braco(b23, b24) rotate translate < -2.0 , -2.00, 2.5 > } object { braco(b33, b34) rotate scale <-1, 1, 1> translate < 2.0 , -2.00, 2.5 > } object { pescoco(p1, p2) rotate translate < 0.0 , 3.0, 2.5 > } } #end #declare NP = 20; #macro empacota(b01, b02, b03, b04, b11, b12, b13, b14, b21, b22, b23, b24, b31, b32, b33, b34, p1, p2, p3, p4) #local P = array[NP]; #local P[0] = b01; #local P[1] = b02; #local P[2] = b03; #local P[3] = b04; #local P[4] = b11; #local P[5] = b12; #local P[6] = b13; #local P[7] = b14; #local P[8] = b21; #local P[9] = b22; #local P[10] = b23; #local P[11] = b24; #local P[12] = b31; #local P[13] = b32; #local P[14] = b33; #local P[15] = b34; #local P[16] = p1; #local P[17] = p2; #local P[18] = p3; #local P[19] = p4; P #end #macro acha_quadro(tt, NQ, TQ) #local k = 0; #local test = TQ[NQ]; #while((k < NQ) & (tt >= TQ[k])) // '>' --> '>=' Prof #local k = k + 1; #end #local k = k - 1; 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) #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]; #end #macro cena(tt) #local NQ = 6; // Prof #local TQ = array[NQ + 1]; #local PQ = array[NQ + 1]; #local TQ[0] = 0.0000; #local TQ[1] = 0.1667; #local TQ[2] = 0.3333; #local TQ[3] = 0.5000; #local TQ[4] = 0.6667; #local TQ[5] = 0.8333; #local TQ[6] = 1.0000; #local PQ[0] = empacota(-10.00, 200, -45.00, -10, -10.00, 200, 0.00, -10, 30.00, 200, 0.00, -10, 10.00, 200, -45.00, -10, 30.00, 0, -90.00, 0); #local PQ[1] = empacota(15.98, 200, -45.00, -10, -35.98, 200, -15.00, -10, 4.02, 200, -15.00, -10, 35.98, 200, -45.00, -10, 30.00, 0, -77.01, 0); #local PQ[2] = empacota(15.98, 200, -15.00, -10, -35.98, 200, -45.00, -10, 4.02, 200, -45.00, -10, 35.98, 200, -15.00, -10, 4.02, 0, -77.01, 0); #local PQ[3] = empacota(-10.00, 200, 15.00, -10, -10.00, 200, -45.00, -10, 30.00, 200, -45.00, -10, 10.00, 200, 15.00, -10, 30.00, 0, -90.00, 0); #local PQ[4] = empacota(-35.98, 200, -15.00, -10, 15.98, 200, -45.00, -10, 55.98, 200, -45.00, -10, -15.98, 200, -15.00, -10, 55.98, 0, -102.99, 0); #local PQ[5] = empacota(-35.98, 200, -45.00, -10, 15.98, 200, -15.00, -10, 55.98, 200, -15.00, -10, -15.98, 200, -45.00, -10, 30.00, 0, -102.99, 0); #local PQ[6] = PQ[0]; // Prof #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; 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); #local rob = object{ bicho(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19) rotate <180, 0, 90> translate < 0 , 0, 0 > } rob #end #include "galho.inc" #local Lg = 4; // Deslocamento por ciclo -- Prof object{ galho( < -Lg/2, 0, 0.8 >, < +Lg/2, 0, 0.8 >, 1.0, clock) } object{ cena(clock) } // object { eixos(5) } #declare centro_cena = < 0.00, 0.00, -1.00 >; #declare raio_cena = 12.0; #declare dir_camera = < 7, 5, 3 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.0; camlight(centro_cena, raio_cena, dir_camera, dist_camera, z, intens_luz)