// Last edited on 2023-12-27 04:20:26 by stolfi background{ color rgb < 0.75, 0.80, 0.85 > } #include "eixos.inc" #declare tx_bicho = texture{ pigment{ color rgb < 0.5, 0, 0 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_galho = texture{ pigment{ color rgb < 0.120, 0.064, 0.008 > } finish{ diffuse 0.9 ambient 0.1 } } #macro tronco() union{ cylinder{ < 0, 0, 0 >, < 0, 0, 5 >, 2.3 texture{ tx_bicho } } } #end #macro membro_ponta() #local mp = cylinder{ < 0, 0, 0 >, < 0, 0.7, 0 >, 0.7 texture{ tx_bicho } } union { object { mp } } #end #macro sub_membro_pequeno(b9) #local smp = cylinder{ < 0, 0, 0 >, < 0, 0, 3 >, 0.3 texture{ tx_bicho } } #local mp = membro_ponta(); union { object { smp } object { mp rotate b9*x translate <0,-0.3,3>} } #end #macro membro(b8, b9) #local sub_membro_grande = cylinder{ < 0, 0, 0 >, < 0, 0, 4 >, 0.3 texture{ tx_bicho } } #local smp = sub_membro_pequeno(b9); union { object { sub_membro_grande } object { smp rotate b8*y translate <0,0,4>} } #end #macro cabeca() #local cab = sphere{ < 0, 0, 0>, 1.5 texture{ tx_bicho } } union { object { cab } } #end #macro sub_pescoco(b1) #local pescoco = cylinder{ < 0, 0, 0 >, < 0, 0, 1.5 >, 0.6 texture{ tx_bicho } } #local cab = cabeca(); union { object { pescoco } object { cab rotate b1*x translate <0,0,3>} } #end #macro cab_pes(b1, b2) #local pescoco = cylinder{ < 0, 0, 0 >, < 0, 0, 2 >, 0.6 texture{ tx_bicho } } #local sp = sub_pescoco(b1); union { object { pescoco } object { sp rotate b2*x translate <0,0,2>} } #end #macro bicho_preguica(b1, b2, b3, b4, a4, b5, b6, b7, a7, b8, b9, b10, a10, b11, b12, b13, a13, b14, b15) #local perna_1 = membro(b8, b9) #local perna_2 = membro(b11, b12) #local braco_1 = membro(b5, b6) #local braco_2 = membro(b14, b15) #local pescoco_e_cabeca = cab_pes(b1, b2) union{ object { tronco() } object { perna_1 rotate b7*y rotate a7*x translate <0,2,0.5>} object { perna_2 rotate b10*y rotate a10*x scale <-1, -1, 1> translate <0,-2,0.5> } object { braco_1 rotate b4*y rotate a4*x translate <0,2,4.5>} object { braco_2 rotate b13*y rotate a13*x scale <-1, -1, 1> translate <0,-2,4.5>} object { pescoco_e_cabeca rotate b3*y translate <0,0,5>} } #end #macro empacota(b1, b2, b3, b4, a4, b5, b6, b7, a7, b8, b9, b10, a10, b11, b12, b13, a13, b14, b15) #local P = array[19]; #local P[0] = b1; #local P[1] = b2; #local P[2] = b3; #local P[3] = b4; #local P[4] = a4; #local P[5] = b5; #local P[6] = b6; #local P[7] = b7; #local P[8] = a7; #local P[9] = b8; #local P[10] = b9; #local P[11] = b10; #local P[12] = a10; #local P[13] = b11; #local P[14] = b12; #local P[15] = b13; #local P[16] = a13; #local P[17] = b14; #local P[18] = b15; P #end #macro acha_quadro(tt, NQ, TQ) #local k = 0; #for (i, 1, NQ-1) #if (TQ[i] >= tt) #break #end #local k=k+1; #end k #end #macro interpola_quadros(tt, ta, Pa, tb, Pb, b1, b2, b3, b4, a4, b5, b6, b7, a7, b8, b9, b10, a10, b11, b12, b13, a13, b14, b15) #local s = (tt - ta)/(tb - ta); #declare b1 = (1-s)*Pa[0] + s*Pb[0]; #declare b2 = (1-s)*Pa[1] + s*Pb[1]; #declare b3 = (1-s)*Pa[2] + s*Pb[2]; #declare b4 = (1-s)*Pa[3] + s*Pb[3]; #declare a4 = (1-s)*Pa[4] + s*Pb[4]; #declare b5 = (1-s)*Pa[5] + s*Pb[5]; #declare b6 = (1-s)*Pa[6] + s*Pb[6]; #declare b7 = (1-s)*Pa[7] + s*Pb[7]; #declare a7 = (1-s)*Pa[8] + s*Pb[8]; #declare b8 = (1-s)*Pa[9] + s*Pb[9]; #declare b9 = (1-s)*Pa[10] + s*Pb[10]; #declare b10 = (1-s)*Pa[11] + s*Pb[11]; #declare a10 = (1-s)*Pa[12] + s*Pb[12]; #declare b11 = (1-s)*Pa[13] + s*Pb[13]; #declare b12 = (1-s)*Pa[14] + s*Pb[14]; #declare b13 = (1-s)*Pa[15] + s*Pb[15]; #declare a13 = (1-s)*Pa[16] + s*Pb[16]; #declare b14 = (1-s)*Pa[17] + s*Pb[17]; #declare b15 = (1-s)*Pa[18] + s*Pb[18]; #end #macro def_tempos() #local TQ = array[7]; #local TQ[0] = 0.000; #local TQ[1] = 0.166; #local TQ[2] = 0.333; #local TQ[3] = 0.500; #local TQ[4] = 0.666; #local TQ[5] = 0.833; #local TQ[6] = 1.000; TQ #end #macro def_quadros() #local PQ = array[7]; #local b1 = -90; #local b2 = -25; #local b3 = 10; #local b4 = 45; #local a4 = -100; #local b5 = 90; #local b6 = 90; #local b7 = 45; #local a7 = -100; #local b8 = 90; #local b9 = 90; #local b10 = -45; #local a10 = -100; #local b11 = -90; #local b12 = 90; #local b13 = -45; #local a13 = -90; #local b14 = -90; #local b15 = 90; #local PQ[0] = empacota(b1, b2, b3, b4, a4, b5, b6, b7, a7, b8, b9, b10, a10, b11, b12, b13, a13, b14, b15); #local b1 = -90; #local b2 = -25; #local b3 = 10; #local b4 = 0; #local a4 = -45; #local b5 = 90; #local b6 = 90; #local b7 = 45; #local a7 = -100; #local b8 = 90; #local b9 = 90; #local b10 = -45; #local a10 = -100; #local b11 = -90; #local b12 = 90; #local b13 = -45; #local a13 = -90; #local b14 = -90; #local b15 = 90; #local PQ[1] = empacota(b1, b2, b3, b4, a4, b5, b6, b7, a7, b8, b9, b10, a10, b11, b12, b13, a13, b14, b15); #local b1 = -90; #local b2 = -25; #local b3 = 10; #local b4 = 0; #local a4 = -45; #local b5 = 90; #local b6 = 90; #local b7 = 45; #local a7 = -100; #local b8 = 90; #local b9 = 90; #local b10 = -45; #local a10 = -100; #local b11 = -90; #local b12 = 90; #local b13 = -0; #local a13 = -45; #local b14 = -90; #local b15 = 90; #local PQ[2] = empacota(b1, b2, b3, b4, a4, b5, b6, b7, a7, b8, b9, b10, a10, b11, b12, b13, a13, b14, b15); #local b1 = -90; #local b2 = -25; #local b3 = 10; #local b4 = 45; #local a4 = -100; #local b5 = 90; #local b6 = 90; #local b7 = 45; #local a7 = -150; #local b8 = 90; #local b9 = 90; #local b10 = -45; #local a10 = -150; #local b11 = -90; #local b12 = 90; #local b13 = -45; #local a13 = -90; #local b14 = -90; #local b15 = 90; #local PQ[3] = empacota(b1, b2, b3, b4, a4, b5, b6, b7, a7, b8, b9, b10, a10, b11, b12, b13, a13, b14, b15); #local b1 = -90; #local b2 = -25; #local b3 = 10; #local b4 = 45; #local a4 = -100; #local b5 = 90; #local b6 = 90; #local b7 = 45; #local a7 = -150; #local b8 = 90; #local b9 = 90; #local b10 = -45; #local a10 = -100; #local b11 = -90; #local b12 = 90; #local b13 = -45; #local a13 = -90; #local b14 = -90; #local b15 = 90; #local PQ[4] = empacota(b1, b2, b3, b4, a4, b5, b6, b7, a7, b8, b9, b10, a10, b11, b12, b13, a13, b14, b15); #local b1 = -90; #local b2 = -25; #local b3 = 10; #local b4 = 45; #local a4 = -100; #local b5 = 90; #local b6 = 90; #local b7 = 45; #local a7 = -100; #local b8 = 90; #local b9 = 90; #local b10 = -45; #local a10 = -100; #local b11 = -90; #local b12 = 90; #local b13 = -45; #local a13 = -90; #local b14 = -90; #local b15 = 90; #local PQ[5] = empacota(b1, b2, b3, b4, a4, b5, b6, b7, a7, b8, b9, b10, a10, b11, b12, b13, a13, b14, b15); #local b1 = -90; #local b2 = -25; #local b3 = 10; #local b4 = 45; #local a4 = -100; #local b5 = 90; #local b6 = 90; #local b7 = 45; #local a7 = -100; #local b8 = 90; #local b9 = 90; #local b10 = -45; #local a10 = -100; #local b11 = -90; #local b12 = 90; #local b13 = -45; #local a13 = -90; #local b14 = -90; #local b15 = 90; #local PQ[6] = empacota(b1, b2, b3, b4, a4, b5, b6, b7, a7, b8, b9, b10, a10, b11, b12, b13, a13, b14, b15); PQ #end #include "galho.inc" #local Lg = 4; // Deslocamento por ciclo -- Prof #macro cena(tt) #local NQ = 6; #local TQ = def_tempos(); #local PQ = def_quadros(); #local b1 = 0; #local b2 = 0; #local b3 = 0; #local b4 = 0; #local a4 = 0; #local b5 = 0; #local b6 = 0; #local b7 = 0; #local a7 = 0; #local b8 = 0; #local b9 = 0; #local b10 = 0; #local a10 = 0; #local b11 = 0; #local b12 = 0; #local b13 = 0; #local a13 = 0; #local b14 = 0; #local b15 = 0; #local k = acha_quadro(tt, NQ, TQ); interpola_quadros(tt, TQ[k], PQ[k], TQ[k+1], PQ[k+1], b1, b2, b3, b4, a4, b5, b6, b7, a7, b8, b9, b10, a10, b11, b12, b13, a13, b14, b15); union{ object { bicho_preguica(b1, b2, b3, b4, a4, b5, b6, b7, a7, b8, b9, b10, a10, b11, b12, b13, a13, b14, b15) } object { galho( < 0, 0, -Lg/2 >, < 0, 0, +Lg/2>, 1.7, 0) translate 4.5*x } } #end // object { eixos(10) } object { cena(clock) } #include "camlight.inc" #declare centro_cena = < 2.00, 0.00, 4.50 >; #declare raio_cena = 11.0; #declare dir_camera = < 4, 7, 3 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)