#include "eixos.inc" #include "transforms.inc" // Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2020-09-30 19:57:13 by jstolfi // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.8, 0.8, 0.8 > } #declare roleta = seed(1246553); #declare tx_art = texture{ pigment{ color rgb < 1, 0.25, 0 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_memb = texture{ pigment{ color rgb < 0.01, 1, 0.12 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_corp = texture{ pigment{ color rgb < 0.9, 0.1, 0.8 > } finish{ diffuse 0.9 ambient 0.1 } } #declare raio_art = 1.5; #declare raio_memb = 1; #declare artc = sphere { <0, 0, 0> raio_art texture {tx_art}} #macro memb(x1, y1, z1) cylinder { <0, 0, 0> raio_memb texture { tx_memb }} #end #macro garra(abert, abert_dedo, ry) #local tam_garra = 3; #declare finger = union { object { artc } object { artc translate <0, 0, -tam_garra> rotate <-abert_dedo, 0, 0>} object { memb(0, 0, -tam_garra) rotate <-abert_dedo, 0, 0>} } #declare fingers = union { object { memb(0, 0, -tam_garra) rotate } object { finger translate <0, 0, -tam_garra> rotate } } union { object { artc } object { fingers } object { fingers scale <1, -1, 1>} rotate <0, ry, 0> } #end #macro braco(xi, yi, ant_x, brac_z) #local tam_memb = 7; #local antebraco = union { object { artc } object { garra(60, 70, brac_z) translate <0, 0, -tam_memb> } // parametros object { memb(0, 0, -tam_memb) } rotate } union { object { artc } object { memb(0, 0, -tam_memb) rotate } object { antebraco translate <0, 0, -tam_memb> rotate } } #end #macro pesc(xi, yi, ant_x, ant_y, brac_z) #local tam_memb_1 = 3; #local tam_memb_2 = 5; #local antebraco = union { object { artc } object { artc scale <3, 3, 3> translate <0, 0, tam_memb_1+3*raio_art>} object { memb(0, 0, tam_memb_1) } rotate } union { object { artc } object { memb(0, 0, tam_memb_2) rotate } object { antebraco translate <0, 0, tam_memb_2> rotate } } #end #macro robo(D11, D12, D13, D14, E11, E12, E13, E14, D21, D22, D23, D24, E21, E22, E23, E24, P1, P2, P3, P4, P5) #local brac_1 = <8, -6, 0>; #local brac_2 = <8, 6, 0>; #local pern_1 = <-8, -6, 0>; #local pern_2 = <-8, 6, 0>; #local pesc_1 = <12, 0, 0>; object { braco(D11, D12, D13, D14) translate brac_1} object { braco(E11, E12, E13, E14) translate brac_2} object { braco(D21, D22, D23, D24) translate pern_1} object { braco(E21, E22, E23, E24) translate pern_2} object { pesc(P1, P2, P3, P4, P5) translate pesc_1 } box { <-6, -3, -2>, <6, 3, 2> texture { tx_corp } scale <2, 2, 2> } #end #declare NP = 21; #macro empacota(A00, A01, A02, A03, A04, A05, A06, A07, A08, A09, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) #local P = array[NP]; #local P[0] = A00; #local P[1] = A01; #local P[2] = A02; #local P[3] = A03; #local P[4] = A04; #local P[5] = A05; #local P[6] = A06; #local P[7] = A07; #local P[8] = A08; #local P[9] = A09; #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; P #end #macro acha_quadro(tt, NQ, TQ) #local i = 0; #while(i < NQ) #if (tt <= TQ[i+1]) #break #end #local i = i+1; #end i; #end #macro interpola_quadros(tt, ta, Pa, tb, Pb, A00, A01, A02, A03, A04, A05, A06, A07, A08, A09, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) #local s = (tt-ta)/(tb-ta); #declare A00 = (1-s)*Pa[0] + s*Pb[0]; #declare A01 = (1-s)*Pa[1] + s*Pb[1]; #declare A02 = (1-s)*Pa[2] + s*Pb[2]; #declare A03 = (1-s)*Pa[3] + s*Pb[3]; #declare A04 = (1-s)*Pa[4] + s*Pb[4]; #declare A05 = (1-s)*Pa[5] + s*Pb[5]; #declare A06 = (1-s)*Pa[6] + s*Pb[6]; #declare A07 = (1-s)*Pa[7] + s*Pb[7]; #declare A08 = (1-s)*Pa[8] + s*Pb[8]; #declare A09 = (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]; #end #macro cena(clk) #local NQ = 8; #local TQ = array[NQ+1]; #local PQ = array[NQ+1]; #local TQ[0] = 0.000; #local PQ[0] = empacota(-30, 30, 90, 00, 30, -30, -90, 00, -30, 30, 90, 00, 30, -30, -90, 00, 00, 90, 00, 30, 00) #local TQ[1] = 0.125; #local PQ[1] = empacota(-90, 30, 90, 00, 30, -30, -90, 00, -90, 30, 90, 00, 30, -30, -90, 00, 00, 90, 00, 30, 00) #local TQ[2] = 0.250; #local PQ[2] = empacota(-90, 00, 90, 00, 30, 00, -90, 00, -90, 00, 90, 00, 30, 00, -90, 00, 00, 90, 00, 30, 00) #local TQ[3] = 0.375; #local PQ[3] = empacota(-90, -30, 90, 00, 30, 30, -90, 00, -90, -30, 90, 00, 30, 30, -90, 00, 00, 90, 00, 30, 00) #local TQ[4] = 0.500; #local PQ[4] = empacota(-30, -30, 90, 00, 30, 30, -90, 00, -30, -30, 90, 00, 30, 30, -90, 00, 00, 90, 00, 30, 00) #local TQ[5] = 0.625; #local PQ[5] = empacota(-30, -30, 90, 00, 90, 30, -90, 00, -30, -30, 90, 00, 90, 30, -90, 00, 00, 90, 00, 30, 00) #local TQ[6] = 0.750; #local PQ[6] = empacota(-30, 0, 90, 00, 90, 0, -90, 00, -30, 0, 90, 00, 90, 0, -90, 00, 00, 90, 00, 30, 00) #local TQ[7] = 0.875; #local PQ[7] = empacota(-30, 30, 90, 00, 90, -30, -90, 00, -30, 30, 90, 00, 90, -30, -90, 00, 00, 90, 00, 30, 00) #local TQ[8] = 1.000; #local PQ[8] = empacota(-30, 30, 90, 00, 30, -30, -90, 00, -30, 30, 90, 00, 30, -30, -90, 00, 00, 90, 00, 30, 00) #local k = acha_quadro(clk, NQ, TQ) #local A00 = 0; #local A01 = 0; #local A02 = 0; #local A03 = 0; #local A04 = 0; #local A05 = 0; #local A06 = 0; #local A07 = 0; #local A08 = 0; #local A09 = 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; interpola_quadros(clk, TQ[k], PQ[k], TQ[k+1], PQ[k+1], A00, A01, A02, A03, A04, A05, A06, A07, A08, A09, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) #local rob = union {robo(A00, A01, A02, A03, A04, A05, A06, A07, A08, A09, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) rotate <0, -120, 0>} rob #end cena(clock) object {cylinder {<0, 0, -40> <0, 0, 40> 1 } rotate<0, -30, 0> translate <9, 0, 5>} // eixos(20) #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 7.00 >; #declare raio_cena = 40.0; #declare dir_camera = < 1, 3, 1 >; #declare dist_camera = 200*raio_cena; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)