// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2023-12-27 02:56:12 by stolfi background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_plastico = texture{ pigment{ color rgb < 0.50, 0.90, 0.50 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_fosca = texture{ pigment{ color rgb < 0.40, 0.01, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #macro perna(b1, b2, b3) #local tronco_perna = cylinder{ < 0.00, +0.00, 0.00 >, < 0.00, 0.00, -2.00 >, 0.5 texture{ tx_fosca } } #local canela_obj = canela(b3) union { object { tronco_perna } object { canela_obj rotate translate <0, 0, -2>} } #end #macro canela(b3) #local tronco_can = cylinder{ < 0.00, +0.00, 0.00 >, < 0.00, 0.00, -2.00 >, 0.5 texture{ tx_fosca } } #declare junta = sphere{ < 0, 0, 0 >, 0.75 texture{ tx_plastico } } union { object { tronco_can translate <0, 0, -1> } object { junta translate <0, 0, -3.5> } object { pata() rotate <0, b3, 0> translate <0, 0, -4>} object { junta translate <0, 0, -0.5> } } #end #macro pata() #local pata_box = box{ <-0.5,-1,0>, <0.5,1,-2> texture{ tx_fosca } } union { object { pata_box } } #end #macro cabeca() #local pescoco = cylinder{ < 0.00, +0.00, 0.00 >, < 0.00, 0.00, 3.00 >, 0.5 texture{ tx_fosca } } #declare topo = sphere{ < 0, 0, 0 >, 1.5 texture{ tx_plastico } } union { object { pescoco translate <0, 0, 0> } object { topo translate <0, 0, 3> } } #end #include "galho.inc" #macro animal(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16) #local tronco_corpo = box{ <-1,-2, -2>, <1, 2, 4> texture{ tx_plastico } } #local Lg = 4.0; // Avanço no galho por ciclo - Prof union { object { cabeca() translate <0, 0, 4> } object { tronco_corpo } object { perna(b1, b2, b3) rotate <90, b4, 0> translate <0, 2, 3.5> } object { perna(b5, b6, b7) rotate <90, b8, 0> scale <1.0, 1.0, -1.0> translate <0, 2, -1.5> } object { perna(b9, b10, b11) rotate <-90, b12, 0> translate <0, -2, 3.5> } object { perna(b13, b14, b15) rotate <-90, b16, 0> scale <1.0, 1.0, -1.0> translate <0, -2, -1.5> } object{ galho( < 0, 0, +Lg/2 >, < 0, 0, -Lg/2 >, 0.33, 0) translate 3.0*x } // Prof } #end #declare PI = 3.14; #declare NP = 16; #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; #while(tt >= TQ[k] & k < NQ) // Prof: '>' --> '>=' #local k = k + 1; #end #local k = k - 1; 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 #macro cena(tt) #local NQ = 6; #local TQ = array[NQ+1]; #local PQ = array[NQ+1]; #local TQ[0] = 0.000; #local PQ[0] = empacota(0, -140, 0, 0, 0, -140, 0, 0, 0, -140, 0, 0, 0, -140, 0, 0); #local TQ[1] = 0.1667; #local PQ[1] = empacota(0, -120, 0, 0, 0, -120, 0, 0, 0, -120, 0, 0, 0, -120, 0, 0); #local TQ[2] = 0.3333; #local PQ[2] = empacota(30, -100, 0, 0, 30, -100, 0, 0, -30, -100, 0, 0, -30, -100, 0, 0); #local TQ[3] = 0.5000; #local PQ[3] = empacota(60, -120, 0, 0, 60, -120, 0, 0, -60, -120, 0, 0, -60, -120, 0, 0); #local TQ[4] = 0.6667; #local PQ[4] = empacota(60, -140, 0, 0, 60, -140, 0, 0, -60, -140, 0, 0, -60, -140, 0, 0); #local TQ[5] = 0.8333; #local PQ[5] = empacota(30, -140, 0, 0, 30, -140, 0, 0, -30, -140, 0, 0, -30, -140, 0, 0); #local TQ[NQ] = 1.000; #local PQ[NQ] = empacota(0, -140, 0, 0, 0, -140, 0, 0, 0, -140, 0, 0, 0, -140, 0, 0); #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 k = acha_quadro(tt, NQ, TQ); #debug concat("!! tt = ", str(tt,0,3), " k = ", str(k,0,0), "\n") 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{ animal(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) } rob #end #include "eixos.inc" // object{ eixos(5.00) } object { cena(clock) rotate<0, -90, 0> } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.00 >; #declare raio_cena = 10; #declare dir_camera = < 7, 2, 5.00 >; #declare dist_camera = 7*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)