// Last edited on 2023-12-27 04:30:16 by stolfi // Código do robo usado como base do aluno Pedro Lucas Lopes Rosa (RA: 248448) - ANIMACAO DE MINHA AUTORIA background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_robo = texture { pigment { color rgb <0.8, 0.8, 0.8> } // Adjust the color as needed finish { ambient 0.1 diffuse 0.9 specular 1.0 metallic 1.0 } } #macro robo(init, final, E11, E12, E13, E14, E15, D11, D12, D13, D14, D15, E21, E22, E23, E24, E25, D21, D22, D23, D24, D25, E26, D26) #local troncoInit = cylinder { init, final, 2 } #local pernaEsquerda = object { perna(E12, E13, E14, E15) } #local pernaDireita = object { perna(D12, D13, D14, D15) } #local bracoEsquerdo = object { braco(E22, E23, E24, E25) } #local bracoDireito = object { braco(D22, D23, D24, D25) } union { object { pescoco(final) } object { troncoInit texture{ tx_robo } } object { pernaEsquerda rotate E11*y translate init + <1.6, 0, +1> texture{ tx_robo } } object { pernaDireita rotate D11*y translate init - <1.6, 0, -1> texture{ tx_robo } } object { bracoEsquerdo rotate E21*x rotate 60*y rotate E26*z translate final + <1.6, 0, -1> texture{ tx_robo } } object { bracoDireito rotate D21*x rotate -60*y rotate D26*z translate final - <1.6, 0, 1> texture{ tx_robo } } } #end #macro braco(E21, E23, E24, E25) #local subbracoObj = object { subbraco(E23, E24, E25) } #local bracoObj = cylinder { <0, 0, 0>, <0, 0, 5>, 0.4 } union { object { bracoObj } object { subbracoObj rotate E21*y translate <0, 0, 5> texture{ tx_robo } } } #end #macro subbraco(E23, E24, E25) #local dedoObj = cylinder { <0, 0, 0>, <0, 0, 2>, 0.2 } #local subbracoObj = cylinder { <0, 0, 0>, <0, 0, 6>, 0.4 } union { object { subbracoObj } object { dedoObj rotate E23*y-20*x translate <0, 0, 6> texture{ tx_robo } } object { dedoObj rotate E24*y-20*x translate <0, 0, 6> texture{ tx_robo } } object { dedoObj rotate E25*y-20*x translate <0, 0, 6> texture{ tx_robo } } } #end #macro perna(E12, E13, E14, E15) #local subpernaObj = object { subperna(E13, E14, E15) } #local pernaObj = cylinder { <0, 0, 0>, <0, 0, 3>, 0.4 } union { object { pernaObj } object { subpernaObj rotate E12*y translate <0, 0, 3> texture{ tx_robo } } } #end #macro subperna(E13, E14, E15) #local dedoObj = cylinder { <0, 0, 0>, <0, 0, 2>, 0.2 } #local subpernaObj = cylinder { <0, 0, 0>, <0, 0, 4>, 0.4 } union { object { subpernaObj } object { dedoObj rotate E13*y-20*x translate <0, 0, 4> texture{ tx_robo } } object { dedoObj rotate E14*y-20*x translate <0, 0, 4> texture{ tx_robo } } object { dedoObj rotate E15*y-20*x translate <0, 0, 4> texture{ tx_robo } } } #end #macro pescoco(init_pescoco) #local pescoco_aux = cylinder { <0, 0, 0>, <0, 0, 1>, 0.6 } union { object { pescoco_aux translate init_pescoco texture{ tx_robo } } object { cabeca() translate init_pescoco + <0, 0, 2.5> texture{ tx_robo } } } #end #macro cabeca() union { sphere { <0, 0, 0>, 2 texture{ tx_robo } } } #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) #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; P #end #macro acha_quadro(tt, NQ, TQ) #local i = 0; #local k = 0; #while (i < NQ) #if (TQ[i] <= tt & TQ[i+1] >= tt) #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, A16, A17, A18, A19, A20, A21) #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]; #end #include "eixos.inc" #include "galho.inc" #declare NP = 22; #macro cena(tt) #local NQ = 8; #local TQ = array[NQ + 1]; #local PQ = array[NQ + 1]; //robo(init, final, E11, E12, E13, E14, E15, D11, D12, D13, D14, D15, E21, E22, E23, E24, E25, D21, D22, D23, D24, D25) #local TQ[0] = 0.000; #local PQ[0] = empacota( 120, 45, 50, -10, -50, -120, -45, 45, 90, -45, 0, -45, -45, -90, 45, 0, 45, -45, -90, 45, 0, 0 ); #local TQ[1] = 0.120; #local PQ[1] = empacota( 120, 45, 50, -10, -50, -120, -30, 45, 90, -45, -20, -75, -45, -90, 45, 0, 75, -45, -90, 45, 0, 0 ); #local TQ[2] = 0.240; #local PQ[2] = empacota( 120, 45, 50, -10, -50, -120, -10, 45, 90, -45, -50, -30, -45, -90, 45, 0, 75, -45, -90, 45, -20, 0 ); #local TQ[3] = 0.360; #local PQ[3] = empacota( 120, 45, 50, -10, -50, -120, -30, 45, 90, -45, -20, -75, -45, -90, 45, 0, 75, -45, -90, 45, 0, 0 ); #local TQ[4] = 0.480; #local PQ[4] = empacota( 120, 45, 50, -10, -50, -120, -45, 45, 90, -45, 0, -45, -45, -90, 45, 0, 45, -45, -90, 45, 0, 0 ); #local TQ[5] = 0.600; #local PQ[5] = empacota( 120, 30, 50, -10, -50, -120, -45, 45, 90, -45, 0, -75, -45, -90, 45, 20, 75, -45, -90, 45, 0, 0 ); #local TQ[6] = 0.720; #local PQ[6] = empacota( 120, 10, 50, -10, -50, -120, -45, 45, 90, -45, 0, -75, -45, -90, 45, -50, 30, -45, -90, 45, 0, -20 ); #local TQ[7] = 0.840; #local PQ[7] = empacota( 120, 30, 50, -10, -50, -120, -45, 45, 90, -45, -20, -75, -45, -90, 45, 20, 75, -45, -90, 45, 0, 0 ); #local TQ[8] = 1.000; #local PQ[8] = empacota( 120, 45, 50, -10, -50, -120, -45, 45, 90, -45, 0, -45, -45, -90, 45, 0, 45, -45, -90, 45, 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; 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); #local rob = object{ robo(<0,0,0>, <0,0,10>, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21) } #local Lg = 4; // Deslocamento pro ciclo -- Prof union{ object{ rob } object{ galho( < 0, -Lg/2, 0 >, < 0, +Lg/2, 0 >, 3, 0) translate 18*z } } #end // object{ eixos(20) } object{ cena(clock) } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 6.00 >; #declare raio_cena = 23.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)