// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2022-01-06 08:03:05 by stolfi // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #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_fosca = texture{ pigment{ color rgb < 0.54, 0.80, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_espelho = texture{ pigment{ color rgb < 1.00, 0.85, 0.30 > } finish{ diffuse 0.2 reflection 0.7*< 1.00, 0.85, 0.30 > ambient 0.1 } } // ====================================================================== // Seed #declare roleta = seed(342); // ====================================================================== // DESCRI��O DA CENA #include "eixos.inc" #macro robo(ra_x,ra_y,ra_z,rfa_y,la_x,la_y,la_z,lfa_y,rt_x,rt_y,rt_z,rc_x,rf_x,lt_x,lt_y,lt_z,lc_x,lf_x) union { box{ <-3,-2,-5>, <+3,+2, 5> texture{tx_fosca}} object{ arm(rfa_y) rotate ra_z*x rotate ra_y * y rotate ra_x*x translate <3.5,0,3>} object{ arm(lfa_y) rotate la_z*x rotate la_y * y rotate la_x*x scale <-1,1,1> translate <-3.5,0, 3> } object{ thigh(rc_x,rf_x) rotate rt_z*x rotate rt_y * y rotate rt_x*x translate <-2,0,-5>} object{ thigh(lc_x,lf_x) rotate lt_z*x rotate lt_y * y rotate lt_x*x translate <2,0,-5>} } #end #macro arm(y_rotation) union { sphere{ <0,0,0>, 0.5 texture{tx_plastico}} cylinder{<0,0,0>, <6,0,0>,0.5 texture{ tx_plastico}} object{ forearm() rotate <0,y_rotation,0> translate <6,0,0>} } #end #macro forearm() union { sphere{ <0,0,0>, 0.5 texture{tx_plastico}} cylinder{<0,0,0>, <4,0,0>, 0.5 texture{ tx_plastico}} sphere{ <4,0,0>, 0.5 texture{tx_plastico}} } #end #macro thigh(calf_x_rotation,feet_x_rotation) union { sphere{ <0,0,0>, 0.5 texture{tx_plastico}} cylinder{<0,0,0>, <0,0,-6>, 0.5 texture{ tx_plastico}} object {calf(feet_x_rotation) rotate translate <0,0,-6>} } #end #macro calf(feet_x_rotation) union { sphere{ <0,0,0>, 0.5 texture{tx_plastico}} cylinder{<0,0,0>, <0,0,-5>, 0.5 texture{ tx_plastico}} object {feet() rotate translate <0,0,-5>} } #end #macro feet() union{ sphere{ <0,0,0>, 0.5 texture{tx_plastico}} box{ <-1,3,-1.5> , <1,-1,-0.5> texture{tx_plastico}} } #end #macro robo_interpola1(tt,tt0, tt1, P0, P1) #local rr = (tt - tt0)/(tt1 - tt0); #local n = 18; #local qd = array[n]; #local j = 0; #while (j < n) #local qd[j] = (1-rr)*P0[j] + rr*P1[j]; #local j = j+1; #end qd #end #macro paraminterpola3(tt, tt0,tt3, vv0,vv1,vv2,vv3) #local vv01 = robo_interpola1(tt, tt0,tt3, vv0,vv1); #local vv12 = robo_interpola1(tt, tt0,tt3, vv1,vv2); #local vv23 = robo_interpola1(tt, tt0,tt3, vv2,vv3); #local vv012 = robo_interpola1(tt, tt0,tt3, vv01,vv12); #local vv123 = robo_interpola1(tt, tt0,tt3, vv12,vv23); #local vv0123 = robo_interpola1(tt, tt0,tt3, vv012,vv123); vv0123 #end #macro quadrointer3(tf) #local quadro1 = array[18] #local quadro1[0] = 0; #local quadro1[1] = 85; #local quadro1[2] = 90; #local quadro1[3] = 20; #local quadro1[4] = 0; #local quadro1[5] = 85; #local quadro1[6] = 90; #local quadro1[7] = 20; #local quadro1[8] = 0; #local quadro1[9] = 0; #local quadro1[10] = 0; #local quadro1[11] = 0; #local quadro1[12] = 0; #local quadro1[13] = 0; #local quadro1[14] = 0; #local quadro1[15] = 0; #local quadro1[16] = 0; #local quadro1[17] = 0; #local quadro2 = array[18] #local quadro2[0] = 20; #local quadro2[1] = 85; #local quadro2[2] = 90; #local quadro2[3] = 30; #local quadro2[4] = -20; #local quadro2[5] = 85; #local quadro2[6] = 90; #local quadro2[7] = 30; #local quadro2[8] = 45; #local quadro2[9] = 0; #local quadro2[10] = 0; #local quadro2[11] = -45; #local quadro2[12] = 10; #local quadro2[13] = 0; #local quadro2[14] = 0; #local quadro2[15] = 0; #local quadro2[16] = 0; #local quadro2[17] = 0; #local quadro3 = array[18] #local quadro3[0] = 45; #local quadro3[1] = 85; #local quadro3[2] = 90; #local quadro3[3] = 45; #local quadro3[4] = -45; #local quadro3[5] = 85; #local quadro3[6] = 90; #local quadro3[7] = 45; #local quadro3[8] = 45; #local quadro3[9] = 0; #local quadro3[10] = 0; #local quadro3[11] = -20; #local quadro3[12] = 20; #local quadro3[13] = -20; #local quadro3[14] = 0; #local quadro3[15] = 0; #local quadro3[16] = -45; #local quadro3[17] = 45; #local quadro4 = array[18] #local quadro4[0] = 0; #local quadro4[1] = 85; #local quadro4[2] = 90; #local quadro4[3] = 20; #local quadro4[4] = 0; #local quadro4[5] = 85; #local quadro4[6] = 90; #local quadro4[7] = 20; #local quadro4[8] = 0; #local quadro4[9] = 0; #local quadro4[10] = 0; #local quadro4[11] = 0; #local quadro4[12] = 0; #local quadro4[13] = 10; #local quadro4[14] = 0; #local quadro4[15] = 0; #local quadro4[16] = -45; #local quadro4[17] = 10; #local quadro5 = array[18] #local quadro5[0] = -20; #local quadro5[1] = 85; #local quadro5[2] = 90; #local quadro5[3] = 30; #local quadro5[4] = 20; #local quadro5[5] = 85; #local quadro5[6] = 90; #local quadro5[7] = 30; #local quadro5[8] = 0; #local quadro5[9] = 0; #local quadro5[10] = 0; #local quadro5[11] = 0; #local quadro5[12] = 0; #local quadro5[13] = 45; #local quadro5[14] = 0; #local quadro5[15] = 0; #local quadro5[16] = -45; #local quadro5[17] = 10; #local quadro6 = array[18] #local quadro6[0] = -45; #local quadro6[1] = 85; #local quadro6[2] = 90; #local quadro6[3] = 45; #local quadro6[4] = 45; #local quadro6[5] = 85; #local quadro6[6] = 90; #local quadro6[7] = 45; #local quadro6[8] = -20; #local quadro6[9] = 0; #local quadro6[10] = 0; #local quadro6[11] = -45; #local quadro6[12] = 45; #local quadro6[13] = 45; #local quadro6[14] = 0; #local quadro6[15] = 0; #local quadro6[16] = -20; #local quadro6[17] = 20; #local quadro7 = array[18] #local quadro7[0] = 0; #local quadro7[1] = 85; #local quadro7[2] = 90; #local quadro7[3] = 20; #local quadro7[4] = 0; #local quadro7[5] = 85; #local quadro7[6] = 90; #local quadro7[7] = 20; #local quadro7[8] = 10; #local quadro7[9] = 0; #local quadro7[10] = 0; #local quadro7[11] = -45; #local quadro7[12] = 10; #local quadro7[13] = 0; #local quadro7[14] = 0; #local quadro7[15] = 0; #local quadro7[16] = 0; #local quadro7[17] = 0; // Quadros chaves exceto os nos: #local T0 = 0.00; #local P0z = quadro2 #local P1a = quadro3 #local T1 = 0.25; #local P1z = quadro4 #local P2a = quadro1 #local T2 = 0.50; #local P2z = quadro5 #local P3a = quadro6 #local T3 = 0.75; #local P3z = quadro7 #local P4a = quadro1 #local T4 = 1.00; #local P4z = P0z #local P0a = P4a // Quadros chaves dos nos: #local P0m = robo_interpola1(T0, T0-(T4-T3)/3, T0+(T1-T0)/3, P0a, P0z) #local P1m = robo_interpola1(T1, T1-(T1-T0)/3, T1+(T2-T1)/3, P1a, P1z) #local P2m = robo_interpola1(T2, T2-(T2-T1)/3, T2+(T3-T2)/3, P2a, P2z) #local P3m = robo_interpola1(T3, T3-(T3-T2)/3, T3+(T4-T3)/3, P3a, P3z) #local P4m = robo_interpola1(T4, T4-(T4-T3)/3, T4+(T1-T0)/3, P4a, P4z) #if ((T0 <= tf) & (tf <= T1)) #local P = paraminterpola3(tf, T0,T1, P0m,P0z,P1a,P1m); #elseif ((T1 <= tf) & (tf <= T2)) #local P = paraminterpola3(tf, T1,T2, P1m,P1z,P2a,P2m); #elseif ((T2 <= tf) & (tf <= T3)) #local P = paraminterpola3(tf, T2,T3, P2m,P2z,P3a,P3m); #elseif ((T3 <= tf) & (tf <= T4)) #local P = paraminterpola3(tf, T3,T4, P3m,P3z,P4a,P4m); #end robo_vet(P) #end #macro quadro(tf) #local T0 = 0.00; #local T1 = 0.25; #local T2 = 0.50; #local T3 = 0.75; #local T4 = 1.00; #local quadro1 = array[18] #local quadro1[0] = 0; #local quadro1[1] = 85; #local quadro1[2] = 90; #local quadro1[3] = 20; #local quadro1[4] = 0; #local quadro1[5] = 85; #local quadro1[6] = 90; #local quadro1[7] = 20; #local quadro1[8] = 0; #local quadro1[9] = 0; #local quadro1[10] = 0; #local quadro1[11] = 0; #local quadro1[12] = 0; #local quadro1[13] = 0; #local quadro1[14] = 0; #local quadro1[15] = 0; #local quadro1[16] = 0; #local quadro1[17] = 0; #local quadro2 = array[18] #local quadro2[0] = 45; #local quadro2[1] = 85; #local quadro2[2] = 90; #local quadro2[3] = 45; #local quadro2[4] = -45; #local quadro2[5] = 85; #local quadro2[6] = 90; #local quadro2[7] = 45; #local quadro2[8] = 45; #local quadro2[9] = 0; #local quadro2[10] = 0; #local quadro2[11] = -20; #local quadro2[12] = 20; #local quadro2[13] = -20; #local quadro2[14] = 0; #local quadro2[15] = 0; #local quadro2[16] = -45; #local quadro2[17] = 45; #local quadro3 = array[18] #local quadro3[0] = 0; #local quadro3[1] = 85; #local quadro3[2] = 90; #local quadro3[3] = 20; #local quadro3[4] = 0; #local quadro3[5] = 85; #local quadro3[6] = 90; #local quadro3[7] = 20; #local quadro3[8] = 0; #local quadro3[9] = 0; #local quadro3[10] = 0; #local quadro3[11] = 0; #local quadro3[12] = 0; #local quadro3[13] = 0; #local quadro3[14] = 0; #local quadro3[15] = 0; #local quadro3[16] = 0; #local quadro3[17] = 0; #local quadro4 = array[18] #local quadro4[0] = -45; #local quadro4[1] = 85; #local quadro4[2] = 90; #local quadro4[3] = 45; #local quadro4[4] = 45; #local quadro4[5] = 85; #local quadro4[6] = 90; #local quadro4[7] = 45; #local quadro4[8] = -20; #local quadro4[9] = 0; #local quadro4[10] = 0; #local quadro4[11] = -45; #local quadro4[12] = 45; #local quadro4[13] = 45; #local quadro4[14] = 0; #local quadro4[15] = 0; #local quadro4[16] = -20; #local quadro4[17] = 20; #if((T0 <= tf) & (tf <= T1)) #local qd = robo_interpola1(tf,T0,T1,quadro1, quadro2 ); #elseif ((T1 <= tf) & (tf <= T2)) #local qd = robo_interpola1(tf,T1,T2, quadro2, quadro3 ); #elseif ((T2 <= tf) & (tf <= T3)) #local qd = robo_interpola1(tf,T2,T3, quadro3, quadro4 ); #elseif ((T3 <= tf) & (tf <= T4)) #local qd = robo_interpola1(tf,T3, T4, quadro4, quadro1 ); #end robo_vet(qd) #end #macro robo_vet(VET) object{robo(VET[0],VET[1],VET[2],VET[3],VET[4],VET[5],VET[6],VET[7],VET[8],VET[9],VET[10],VET[11],VET[12],VET[13],VET[14],VET[15],VET[16],VET[17])} #end #macro interpola1(tt,tt0, tt1, P0, P1) #local rr = (tt - tt0)/(tt1 - tt0); #local qd = (1-rr)*P0 + rr*P1; qd #end #macro interpola3(tt, tt0,tt3, vv0,vv1,vv2,vv3) #local vv01 = interpola1(tt, tt0,tt3, vv0,vv1); #local vv12 = interpola1(tt, tt0,tt3, vv1,vv2); #local vv23 = interpola1(tt, tt0,tt3, vv2,vv3); #local vv012 = interpola1(tt, tt0,tt3, vv01,vv12); #local vv123 = interpola1(tt, tt0,tt3, vv12,vv23); #local vv0123 = interpola1(tt, tt0,tt3, vv012,vv123); vv0123 #end #macro segtaculo(M,P0,R0,P1,R1,P2,R2,P3,R3) #local tt = 0; #while (tt < M) #local centro = interpola3(tt,0,M,P0,P1,P2,P3); #local raio = interpola3(tt,0,M,R0,R1,R2,R3); object{sphere{centro, raio texture{tx_plastico}}} #local tt = tt + 1; #end #end #macro tentaculo(M,N,PP,RR) #local i = 0; #while(i; #local PP[0][1] = <0, 15, 15>; #local PP[0][2] = <0, 10, 20>; #local PP[1][1] = <0, 0, 10>; #local PP[0][3] = (PP[0][2] + PP[1][1])/2; #local PP[1][0] = PP[0][3]; #local PP[1][2] = <0, 3, 5>; #local PP[2][1] = <0, 5, -5>; #local PP[1][3] = (PP[1][2] + PP[2][1])/2; #local PP[2][0] = PP[1][3]; #local PP[2][2] = <0, 10, -15>; #local PP[3][1] = <0, -5, -20>; #local PP[2][3] = (PP[2][2] + PP[3][1])/2; #local PP[3][0] = PP[2][3]; #local PP[3][2] = <0, -15, -10>; #local PP[3][3] = <0, -5, 0>; #local RR[0][0] = 3; #local RR[0][1] = 3.5; #local RR[0][2] = 4; #local RR[1][1] = 3; #local RR[0][3] = (RR[0][2] + RR[1][1])/2;; #local RR[1][0] = RR[0][3]; #local RR[1][2] = 3.2; #local RR[2][1] = 3; #local RR[1][3] = (RR[1][2] + RR[2][1])/2;; #local RR[2][0] = RR[1][3]; #local RR[2][2] = 3; #local RR[3][1] = 2; #local RR[2][3] = (RR[2][2] + RR[3][1])/2;; #local RR[3][0] = RR[2][3]; #local RR[3][2] = 2; #local RR[3][3] = 1; union{tentaculo(M,N,PP,RR)} #end union { // object{ eixos(100) } object{alien(100,4)} } #include "camlight.inc" #declare centro_cena = < 0, 5, 0 >; #declare raio_cena = 33; #declare dir_camera = < -10, -3, 5 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)