// CORES E TEXTURAS background{ color rgb < 0.90, 0.20, 0.85 > } #declare tx_tanque = texture{ pigment{ color rgb < 0.7, 0.50, 0.40 > } //finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } ///////////////////////////////////////////////////////////////////////////////////////////// // DESCRICAO DA CENA #include "eixos.inc" #macro pata() object { box { < 0, -1, -0.2 >, < 2, 1, 0.2 > } } #end #macro submembro(b4) #local objeto = cylinder { < 0, 0, 0 >, < 0, 0, -5 >, 1 } #local subobjeto = object { pata() } union { object { objeto } object { subobjeto rotate b4*y translate < 0, 0, -5 > } } #end #macro membro(b3, b4) #local objeto = cylinder { < 0, 0, 0 >, < 0, 0, -5 >, 1 } #local subobjeto = object { submembro(b4) } union { object { objeto } object { subobjeto rotate b3*y translate < 0, 0, -5 > } } #end // b11 a b14: perna esquerda // b21 a b24: perna direita // b31 a b34: braco esquerdo // b41 a b44: braco direito #macro robo(b11, b12, b13, b14, b21, b22, b23, b24, b31, b32, b33, b34, b41, b42, b43, b44) #local objeto = cylinder { < 0, 0, 10 >, < 0, 0, 0 >, 5 } #local perna_esquerda = object { membro(b13, b14) } #local perna_direita = object { membro(b23, b24) } #local braco_esquerdo = object { membro(b33, b34) rotate 90*x translate < 0, 0, 8>} #local braco_direito = object { membro(b43, b44) rotate -90*x translate < 0, 0, 8>} union { object { objeto } object { perna_esquerda rotate b11*y rotate b12*z translate < 0, 3, 0 > } object { perna_direita //scale < +1, -1, +1 > rotate b21*y rotate b22*z translate < 0, -3, 0 > } object { braco_esquerdo rotate -b31*z rotate b32*y translate < 0, 3, 0 > } object { braco_direito //scale < +1, -1, +1 > rotate b41*z rotate b42*y translate < 0, -3, 0 > } } #end //robo( 0, 0, 0, 0, 0, 0, 0, 0, 60, -60, 0, -30, 60, -60, 0, -30) #declare NP = 16; #macro cena(tt) #local NQ = 5; #local TQ = array[NQ+1]; #local PQ = array[NQ+1]; #local TQ[0] = 0.000; #local PQ[0] = empacota( 0, 0, 0, 0, 0, 0, 0, 0, 60, -60, 0, -30, 60, -60, 0, -30 ) #local TQ[1] = 0.200; #local PQ[1] = empacota( 0, 0, 0, 0, 0, 0, 0, 0, 40, -60, 0, -30, 40, -60, 0, -30 ) #local TQ[2] = 0.400; #local PQ[2] = empacota( 0, 0, 0, 0, 0, 0, 0, 0, 20, -60, 0, -30, 20, -60, 0, -30 ) #local TQ[3] = 0.600; #local PQ[3] = empacota( 0, 0, 0, 0, 0, 0, 0, 0, 20, -60, 0, -30, 20, -60, 0, -30 ) #local TQ[4] = 0.800; #local PQ[4] = empacota( 0, 0, 0, 0, 0, 0, 0, 0, 40, -60, 0, -30, 40, -60, 0, -30 ) #local TQ[5] = 1.000; #local PQ[5] = empacota( 0, 0, 0, 0, 0, 0, 0, 0, 60, -60, 0, -30, 60, -60, 0, -30 ) #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; 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) #local rob = object{ robo(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) } rob #end #macro empacota(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) #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; P #end #macro acha_quadro(tt, NQ, TQ) #local k = 0; #local i = 0; #while (i < NQ) #if (tt >= TQ[i] & tt < TQ[i+1]) #local k = i; #end #local i = i + 1; #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) #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]; #end object { cena(clock) } ////////////////////////////////////////////////////////////////////////////////////////////////// object{ eixos(20.0) } #include "camlight.inc" #declare centro_cena = < 0.00, 5.00, 7.00 >; #declare raio_cena = 30.0; #declare dir_camera = < 7.00, 2.00, 1.00 >; #declare dist_camera = 2*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)