// Last edited on 2023-12-27 04:46:08 by stolfi background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_rosa = texture{ pigment{ color rgb < 0.90, 0.40, 0.70 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #macro subMembro(e13, e14, e15) #local tamanhoSubMembro = <0,0,5>; #local objSubMembro = cylinder{ <0,0,0>, tamanhoSubMembro, 0.5 texture{ tx_rosa } } #local objDedo = cylinder{ <0,0,0>, <0,0,2>, 0.3 texture{ tx_rosa } } union{ object{ objSubMembro } object{ objDedo rotate e13 * y translate tamanhoSubMembro } object{ objDedo rotate e14 * y translate tamanhoSubMembro } object{ objDedo rotate e15 * y translate tamanhoSubMembro } } #end #macro membro(e12, e13, e14, e15) #local tamanhoMembro = <0,0,7>; #local objMembro = cylinder{ <0,0,0>, tamanhoMembro, 0.5 texture{ tx_rosa } } #local objSubMembro = object{ subMembro(e13, e14, e15) } union{ object{ objMembro } object{ objSubMembro rotate e12 * y translate tamanhoMembro } } #end #macro subPecoco(pk3) #local tamanhoSubPescoco = <0,0,-2>; #local objSubPecoco = cylinder{ <0,0,0>, tamanhoSubPescoco, 0.5 texture{ tx_rosa } } #local objCabeca = sphere{ <0,0,0>, 2 } union{ object{ objSubPecoco } object{ objCabeca rotate pk3 * y translate tamanhoSubPescoco texture{ tx_rosa } } } #end #macro pescoco(pk2, pk3) #local tamanhoPescoco = <0,0,-2>; #local objPecoco = cylinder{ <0,0,0>, tamanhoPescoco, 0.5 texture{ tx_rosa } } #local objSubPecoco = object{ subPecoco(pk3) } union{ object{ objPecoco } object{ objSubPecoco rotate pk2 * y translate tamanhoPescoco } } #end #macro robo( posFim, e11, e12, e13, e14, e15, e21, e22, e23, e24, e25, d11, d12, d13, d14, d15, d21, d22, d23, d24, d25, pk1, pk2, pk3 ) #local troncoPrincipal = cylinder{ <0,0,0>, posFim, 4 texture{ tx_rosa } } #local objPernaEsquerda = object{ membro(e12, e13, e14, e15) } #local objPernaDireita = object{ membro(d12, d13, d14, d15) } #local objMaoEsquerda = object{ membro(e22, e23, e24, e25) } #local objMaoDireita = object{ membro(d22, d23, d24, d25) } #local objPescoco = object{ pescoco(pk2, pk3) } union{ object{ troncoPrincipal } object{ objPernaEsquerda rotate e11 * x translate posFim - <4.5,0,0> } object{ objPernaDireita rotate d11 * x translate posFim + <4.5,0,0> } object{ objMaoEsquerda rotate e21 * y translate <0,0,0> - <4.5,0,0> scale <+1,+1,-1> } object{ objMaoDireita rotate d21 * y translate <0,0,0> + <4.5,0,0> scale <+1,+1,-1> } object{ objPescoco rotate pk1 * y translate <0,0,-10> scale <+1,+1,-1> } } #end #declare posFim = <0,0,11>; #declare NP = 23; #macro empacota( A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22 ) #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; #local P[22] = A22; P #end #macro acha_quadro(tt, NQ, TQ) #local cont = 0; #local k = NQ - 1; #while(cont < NQ) #if(TQ[cont] >= tt) #local k = cont; #local cont = NQ + 1; #end #local cont = cont + 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, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22 ) #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]; #declare A22 = (1-s)*Pa[22] + s*Pb[22]; #end #macro cena(tt) #local NQ = 6; #local TQ = array[NQ+1]; #local PQ = array[NQ+1]; #local TQ[0] = 0.0000; #local PQ[0] = empacota( 0,90,20,-20,40, -45,90,-45,45,-90, 0,-90,-20,20,-40, 45,-90,45,-45,90, 0,0,0 ); #local TQ[1] = 0.1666; #local PQ[1] = empacota( 0,0,20,-20,40, -45,90,-45,45,-90, 0,-90,-20,20,-40, 45,-90,45,-45,90, 0,0,0 ); #local TQ[2] = 0.3332; #local PQ[2] = empacota( -60,20,20,-20,40, -45,90,-45,45,-90, 0,-90,-20,20,-40, 45,-90,45,-45,90, 0,0,0 ); #local TQ[3] = 0.4998; #local PQ[3] = empacota( -60,60,20,-20,40, -45,90,-45,45,-90, 0,-90,-20,20,-40, 45,-90,45,-45,90, 0,0,0 ); #local TQ[4] = 0.6664; #local PQ[4] = empacota( -60,60,20,-20,40, -45,90,-45,45,-90, 0,0,-20,20,-40, 45,-90,45,-45,90, 0,0,0 ); #local TQ[5] = 0.8330; #local PQ[5] = empacota( -60,60,20,-20,40, -45,90,-45,45,-90, -60,-20,-20,20,-40, 45,-90,45,-45,90, 0,0,0 ); #local TQ[6] = 1.0000; // #local PQ[6] = empacota( // -60,60,20,-20,40, // -45,90,-45,45,-90, // -60,-60,-20,20,-40, // 45,-90,45,-45,90, // 0,0,0 // ); #local PQ[6] = PQ[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; #local A22 = 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, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22 ); #local rob = object{ robo( posFim, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22 )} rob #end #include "eixos.inc" // object{ eixos(10) } object{ cena(clock) } #include "galho.inc" #local Lg = 14; // Deslocamento em 1 ciclo -- Prof object{ galho( < 0, -Lg/2, 0>, < 0, +Lg/2, 0>, 1, clock) rotate -12*x translate +16.5*z} // cylinder{ <0,-30,23>, <0,30,10>, 1 texture{ tx_rosa } } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 5.00 >; #declare raio_cena = 27.0; #declare dir_camera = < 7, 4, 3 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)