// Last edited on 2023-12-27 04:34:50 by stolfi background{ color rgb < 1, 1, 1 > } #declare steel_1 = // aço texture{ pigment{ color rgb < 0.70, 0.70, 0.70 > } finish{ diffuse 0.5 ambient 0.1 brilliance 1 reflection 0.1 specular 0.2 roughness 0.5} } #declare tx_plastico = texture{ pigment{ color rgb < 0.10, 0.80, 1.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_2 = texture{ pigment{ color rgb < 0.30, 0.30, 0.30 > } finish{ diffuse 0.5 ambient 0.1 brilliance 1 reflection 0.15 specular 0.2 roughness 0.5} } #declare tx_xadrez = texture{ pigment{ checker color rgb < 0.10, 0.32, 0.60 >, color rgb < 1.00, 0.97, 0.90 > } finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } #declare tx_4 = texture{ pigment{ color rgb < 0.25, 0.59, 0.04 > } finish{ diffuse 0.3 ambient 0.1 specular 0.5 roughness 1 } } #declare tx_woood = texture { pigment {color rgb <.52,.37,0.26>} finish{ diffuse 0.9} } #macro punho () #local tronco = cone { <0, 0, 0>, 0 // , center & radius of one end <0, 0, 1>, 0.3 // , center & radius of the other end } union { object {tronco texture {tx_2}} } #end #macro antebraco (c) #local tronco = cylinder { <0, 0, 0>, <0, 0, 1.5>, 0.4 // center of one end, center of other end, radius } #local pun = object{punho()} union { object{tronco texture {tx_xadrez}} object{pun rotate <0, c, 0> translate <0, 0, 1.5>} } #end #macro braco (b, c) #local tronco = cylinder { <0, 0, 0>, <0, 0, 2>, 0.4 // center of one end, center of other end, radius } #local ante = object{antebraco (c)} union { object{tronco texture {tx_4}} object{ante rotate <0, b, 0> translate <0, 0, 2>} } #end #macro cabeca () #local cabe = sphere { <0, 0, 0>, 1 // , radius } union { object{cabe texture {tx_xadrez}} } #end #macro subpescoco (c) #local tronco = cylinder { <0, 0, 0>, <0, 0, 0.6>, 0.4 // center of one end, center of other end, radius } #local cab = object{cabeca()} union { object{tronco texture {tx_2}} object{cab rotate <0, c, 0> translate <0, 0, 1.6>} } #end #macro pescoco (b1, b2, b3, c) #local tronco = cylinder { <0, 0, 0>, <0, 0, 1>, 0.4 // center of one end, center of other end, radius } #local sub = object{subpescoco (c)} union { object{tronco texture {tx_4}} object{sub rotate translate <0, 0, 1>} } #end #macro robo (E11, E12, E13, E14, E15, E21, E22, E23, E24, E25, D11, D12, D13, D14, D15, D21, D22, D23, D24, D25,P1, P2, P3, P4, P5, P6, A1, A2, A3, R1, R2, R3) #local corpo = box { , // near lower left corner, far upper right corner texture {tx_plastico} } #local perna_esquerda = object {braco(E14, E15) rotate translate <0, 0, 0> + rotate } #local perna_direita = object {braco(D14, D15) rotate translate <0, 4, 0> + rotate } #local braco_esquerdo = object {braco(E24, E25) rotate translate <2, 0, 6> + rotate } #local braco_direito = object {braco(D24, D25) rotate translate <2, 4, 6> + rotate } #local pesco = object {pescoco(P1, P2, P3, P4) rotate translate <1, 2, 6> + rotate } union { object {corpo rotate } object {perna_esquerda} object {perna_direita} object {braco_esquerdo} object {braco_direito} object {pesco} } #end #declare NP = 32; #macro empacota(E11, E12, E13, E14, E15, E21, E22, E23, E24, E25, D11, D12, D13, D14, D15, D21, D22, D23, D24, D25,P1, P2, P3, P4, P5, P6, A1, A2, A3, R1, R2, R3) #local P = array[NP]; #local P[0] = E11; #local P[1] = E12; #local P[2] = E13; #local P[3] = E14; #local P[4] = E15; #local P[5] = E21; #local P[6] = E22; #local P[7] = E23; #local P[8] = E24; #local P[9] = E25; #local P[10] = D11; #local P[11] = D12; #local P[12] = D13; #local P[13] = D14; #local P[14] = D15; #local P[15] = D21; #local P[16] = D22; #local P[17] = D23; #local P[18] = D24; #local P[19] = D25; #local P[20] = P1; #local P[21] = P2; #local P[22] = P3; #local P[23] = P4; #local P[24] = P5; #local P[25] = P6; #local P[26] = A1; #local P[27] = A2; #local P[28] = A3; #local P[29] = R1; #local P[30] = R2; #local P[31] = R3; P #end #macro acha_quadro(tt, NQ, TQ) #local k = 0; #if (tt < TQ[1]) // Prof #local k = 0; #else #if (tt <= TQ[2]) // Prof #local k = 1; #else #if (tt <= TQ[3]) // Prof #local k = 2; #else #if (tt <= TQ[4]) // Prof #local k = 3; #else #if (tt <= TQ[5]) // Prof #local k = 4; #else #local k = 5; #end #end #end #end #end k #end #macro interpola_quadros(tt, ta, Pa, tb, Pb, E11, E12, E13, E14, E15, E21, E22, E23, E24, E25, D11, D12, D13, D14, D15, D21, D22, D23, D24, D25,P1, P2, P3, P4, P5, P6, A1, A2, A3, R1, R2, R3) #local s = (tt-ta)/(tb-ta); #declare E11 = (1-s)*Pa[0] + s*Pb[0]; #declare E12 = (1-s)*Pa[1] + s*Pb[1]; #declare E13 = (1-s)*Pa[2] + s*Pb[2]; #declare E14 = (1-s)*Pa[3] + s*Pb[3]; #declare E15 = (1-s)*Pa[4] + s*Pb[4]; #declare E21 = (1-s)*Pa[5] + s*Pb[5]; #declare E22 = (1-s)*Pa[6] + s*Pb[6]; #declare E23 = (1-s)*Pa[7] + s*Pb[7]; #declare E24 = (1-s)*Pa[8] + s*Pb[8]; #declare E25 = (1-s)*Pa[9] + s*Pb[9]; #declare D11 = (1-s)*Pa[10] + s*Pb[10]; #declare D12 = (1-s)*Pa[11] + s*Pb[11]; #declare D13 = (1-s)*Pa[12] + s*Pb[12]; #declare D14 = (1-s)*Pa[13] + s*Pb[13]; #declare D15 = (1-s)*Pa[14] + s*Pb[14]; #declare D21 = (1-s)*Pa[15] + s*Pb[15]; #declare D22 = (1-s)*Pa[16] + s*Pb[16]; #declare D23 = (1-s)*Pa[17] + s*Pb[17]; #declare D24 = (1-s)*Pa[18] + s*Pb[18]; #declare D25 = (1-s)*Pa[19] + s*Pb[19]; #declare P1 = (1-s)*Pa[20] + s*Pb[20]; #declare P2 = (1-s)*Pa[21] + s*Pb[21]; #declare P3 = (1-s)*Pa[22] + s*Pb[22]; #declare P4 = (1-s)*Pa[23] + s*Pb[23]; #declare P5 = (1-s)*Pa[24] + s*Pb[24]; #declare P6 = (1-s)*Pa[25] + s*Pb[25]; #declare A1 = (1-s)*Pa[26] + s*Pb[26]; #declare A2 = (1-s)*Pa[27] + s*Pb[27]; #declare A3 = (1-s)*Pa[28] + s*Pb[28]; #declare R1 = (1-s)*Pa[29] + s*Pb[29]; #declare R2 = (1-s)*Pa[30] + s*Pb[30]; #declare R3 = (1-s)*Pa[31] + s*Pb[31]; #end #macro cena(tt) #local NQ = 6; // 7 --> 6 Prof #local TQ = array[NQ+1] #local PQ = array[NQ+1] #local TQ[0] = 0; #local TQ[1] = 0.17; #local TQ[2] = 0.33; #local TQ[3] = 0.5; #local TQ[4] = 0.67; #local TQ[5] = 0.83; #local TQ[6] = 1; #local PQ[0] = empacota(-20,290,0,-20,0, 180,90,0,0,0, 20,290,0,-20,0, -180,90,0,5,0, 0,0,0,0,0,0, -8.5,-2,-5, 90,90,90); #local PQ[1] = empacota(-20,290,0,-20,0, 180,120,0,0,0, 20,290,0,-20,0, -180,90,0,5,0, 0,0,0,0,0,0, -8.4,-2,-5, 90,90,90); #local PQ[2] = empacota(-20,290,0,-20,0, 180,120,0,0,0, 20,330,0,-20,0, -180,90,0,5,0, 0,0,0,0,0,0, -8.3,-2,-5, 90,90,90); #local PQ[3] = empacota(-20,250,0,-20,0, 180,90,0,0,0, 20,290,0,-20,0, -180,60,0,5,0, 0,0,0,0,0,0, -8.2,-2,-1, 90,90,90); #local PQ[4] = empacota(-20,250,0,-20,0, 180,90,0,0,0, 20,290,0,-20,0, -180,90,0,5,0, 0,0,0,0,0,0, -8.3,-2,-1, 90,90,90); #local PQ[5] = empacota(-20,290,0,-20,0, 180,90,0,0,0, 20,290,0,-20,0, -180,90,0,5,0, 0,0,0,0,0,0, -8.4,-2,-1, 90,90,90); #local PQ[6] = empacota(-20,290,0,-20,0, 180,90,0,0,0, 20,290,0,-20,0, -180,90,0,5,0, 0,0,0,0,0,0, -8.5,-2,-1, 90,90,90); #local k = acha_quadro(tt, NQ, TQ); #debug concat ("!!k=", str(k,0,0),"\n") #local E11 =0; #local E12 =0; #local E13 =0; #local E14 =0; #local E15 =0; #local E21 =0; #local E22 =0; #local E23 =0; #local E24 =0; #local E25 =0; #local D11 =0; #local D12 =0; #local D13 =0; #local D14 =0; #local D15 =0; #local D21 =0; #local D22 =0; #local D23 =0; #local D24 =0; #local D25 =0; #local P1 = 0; #local P2 = 0; #local P3 = 0; #local P4 = 0; #local P5 = 0; #local P6 = 0; #local A1 = 0; #local A2 = 0; #local A3 = 0; #local R1 = 0; #local R2 = 0; #local R3 = 0; interpola_quadros(tt, TQ[k], PQ[k], TQ[k+1], PQ[k+1], E11, E12, E13, E14, E15, E21, E22, E23, E24, E25, D11, D12, D13, D14, D15, D21, D22, D23, D24, D25,P1, P2, P3, P4, P5, P6, A1, A2, A3, R1, R2, R3); #local rob = object{ robo (E11, E12, E13, E14, E15, E21, E22, E23, E24, E25, D11, D12, D13, D14, D15, D21, D22, D23, D24, D25,P1, P2, P3, P4, P5, P6, A1, A2, A3, R1, R2, R3)} rob #end // #declare galho = cylinder { // <-100, 0, 10>, <100, 0, 10>, 0.5 // center of one end, center of other end, radius // texture{tx_woood} // } #include "eixos.inc" // object{ eixos(10) } object{ cena(clock) } #include "galho.inc" #local Lg = 4; // Deslocamento por ciclo -- Prof object{ galho( < -Lg/2, 0, 0 >, < +Lg/2, 0, 0 >, 0.5, 0) translate 10*z } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 8.00 > + Lg*clock*x; #declare raio_cena = 10.0; #declare dir_camera = < 3, 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)