// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2020-09-30 19:57:13 by jstolfi // ====================================================================== // CORES E TEXTURAS //#include "textures.inc" background{ color rgb < 240/255, 243/255, 246/255 > } #declare tx_xadrez = texture{ pigment{ checker color rgb < 0.17, 0.17, 0.17 >, color rgb < 1.00, 0.97, 0.90 > } finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } #declare tx_preto = texture{ pigment{ color rgb < 0.17, 0.17, 0.17 > } finish{ diffuse 0.9 ambient 0.1 } scale 1.0 } #declare tx_vermelho = texture{ pigment{ color rgb < 0.80, 0.0, 0.17 > } finish{ diffuse 0.9 ambient 0.4 } scale 1.0 } #declare tx_grau1 = texture{ pigment{ color rgb < 0.17, 0.80, 1.00 > } finish{ diffuse 0.9 ambient 0.1 } scale 1.0 } #declare tx_grau2 = texture{ pigment{ color rgb < 0.80, 0.17, 1.00 > } finish{ diffuse 0.9 ambient 0.1 } scale 1.0 } #declare tx_grau3 = texture{ pigment{ color rgb < 0.10, 1.00, 0.17 > } finish{ diffuse 0.9 ambient 0.1 } scale 1.0 } #declare tx_grau4 = texture{ pigment{ color rgb < 1.00, 0.17, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } scale 1.0 } #declare tx_tubo = texture{ pigment{ color rgb < 0.20, 0.07, 0.90 > } finish{ diffuse 0.9 ambient 0.1 } scale 1.0 } // ====================================================================== // DESCRI��O DA CENA //-------------------------------------------------------------- #macro corpo(centro, raio) sphere{ centro, raio texture{ tx_preto } } #end //-------------------------------------------------------------- #macro cabeca() union{ cylinder{ <0,0,0>, <3, 0, 0>, 0.35 texture{ tx_grau4 } } sphere{ <3, 0, 0>, 1.2 texture{ tx_grau4 } } } #end #macro pescoco2(angulos) union{ cylinder{ <0, 0, 0>, <3, 0, 0>, 0.35 texture{ tx_grau3 } } object{ cabeca() rotate angulos[4]*y rotate angulos[5]*z translate <3, 0, 0> } } #end #macro pescoco1(angulos) union{ cylinder{ <0,0,0>, <2, 0, 0>, 0.35 texture{ tx_grau2 } } object{ pescoco2(angulos) rotate angulos[2]*y rotate angulos[3]*z translate <2, 0, 0> } } #end //-------------------------------------------------------------- #macro extremidade() cylinder{ <0,0,0>, <3, 0, 0>, 0.35 texture{ tx_grau4 } } #end #macro sub_membro(angulos) union{ cylinder{ <0, 0, 0>, <3, 0, 0>, 0.35 texture{ tx_grau1 } } object{ extremidade() rotate angulos[4]*y rotate angulos[5]*z translate <3, 0, 0> } } #end #macro membro(angulos) union{ cylinder{ <0,0,0>, <5, 0, 0>, 0.35 texture{ tx_grau2 } } object{ sub_membro(angulos) rotate angulos[2]*y rotate angulos[3]*z translate <5, 0, 0> } } #end //-------------------------------------------------------------- #macro robo(angulos_perna1, angulos_perna2, angulos_braco1, angulos_braco2, angulos_cabeca) #local centro_ROBO = <0, 0, 0>; #local raio_corpo = 2; #local centro_corpo_inferior = centro_ROBO - <0, 0, raio_corpo>; #local centro_corpo_superior = centro_ROBO + <0, 0, raio_corpo>; #local perna1 = centro_corpo_inferior + <0, raio_corpo, 0>; #local perna2 = centro_corpo_inferior - <0, raio_corpo, 0>; #local braco1 = centro_corpo_superior + <0, raio_corpo, 0>; #local braco2 = centro_corpo_superior - <0, raio_corpo, 0>; #local cabeca1 = centro_corpo_superior + <0, 0, raio_corpo>; union{ corpo(centro_corpo_inferior, raio_corpo) corpo(centro_corpo_superior, raio_corpo) object{ membro(angulos_perna1) rotate angulos_perna1[0]*y rotate angulos_perna1[1]*z translate perna1 } object{ membro(angulos_perna2) rotate angulos_perna2[0]*y rotate angulos_perna2[1]*z translate perna2 } object{ membro(angulos_braco1) rotate angulos_braco1[0]*y rotate angulos_braco1[1]*z translate braco1 } object{ membro(angulos_braco2) rotate angulos_braco2[0]*y rotate angulos_braco2[1]*z translate braco2 } object{ pescoco1(angulos_cabeca) rotate angulos_cabeca[0]*y rotate angulos_cabeca[1]*z translate cabeca1 } } #end // ====================================================================== // ANIMACAO // arrays #macro empacota(NP, a0, a1, a2, a3, a4, a5) #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; P #end //------ #macro acha_quadro(tt, NQ) #local res_k = floor(tt*NQ); #if(tt >= 1) #local res_k = 0; #end res_k #end #macro interpola_quadros(tt, ta, Pa, tb, Pb, a1, a2, a3, a4, a5, a6) #local s = (tt - ta)/(tt - tb); #declare a1 = (1-s)*Pa[0] + s*Pb[0]; #declare a2 = (1-s)*Pa[1] + s*Pb[1]; #declare a3 = (1-s)*Pa[2] + s*Pb[2]; #declare a4 = (1-s)*Pa[3] + s*Pb[3]; #declare a5 = (1-s)*Pa[4] + s*Pb[4]; #declare a6 = (1-s)*Pa[5] + s*Pb[5]; #end // #macro cena(tt) // importante #local NQ = 8; #local TQ = array[NQ+1]; // arrays com os angulos dos membros #local PQ_perna1 = array[NQ+1]; #local PQ_perna2 = array[NQ+1]; #local PQ_braco1 = array[NQ+1]; #local PQ_braco2 = array[NQ+1]; #local PQ_cabeca = array[NQ+1]; // frame 0 #local TQ[0] = 0.000; #local PQ_perna1[0] = empacota(6, 45, 15, -15, 0, -45, -90); #local PQ_perna2[0] = empacota(6, 45, 15, -15, 0, -45, 90); #local PQ_braco1[0] = empacota(6, 45, 15, -15, 0, -45, -90); #local PQ_braco2[0] = empacota(6, 45, 15, -15, 0, -45, 90); #local PQ_cabeca[0] = empacota(6, -90, 0, -45, 0, -15, 0); // frame 1 #local TQ[1] = 0.125; #local PQ_perna1[1] = empacota(6, 65, 5, -15, 0, -35, -70); #local PQ_perna2[1] = empacota(6, 45, 15, -15, 0, -25, 60); #local PQ_braco1[1] = empacota(6, 25, 15, -15, 0, -45, -100); #local PQ_braco2[1] = empacota(6, 25, 15, -15, 0, -45, 90); #local PQ_cabeca[1] = empacota(6, -80, 0, -35, 0, -10, 0); // frame 2 #local TQ[2] = 0.250; #local PQ_perna1[2] = empacota(6, 55, 5, -35, 0, -100, -0); #local PQ_perna2[2] = empacota(6, 60, 15, -25, 0, -25, 30); #local PQ_braco1[2] = empacota(6, 25, 65, -15, 5, -25, -15); #local PQ_braco2[2] = empacota(6, 5, 15, -45, 0, -45, 90); #local PQ_cabeca[2] = empacota(6, -80, 0, -15, 0, -5, 0); // frame 3 #local TQ[3] = 0.375; #local PQ_perna1[3] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_perna2[3] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_braco1[3] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_braco2[3] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_cabeca[3] = empacota(6, 0, 0, 0, 0, 0, 0); // frame 4 #local TQ[4] = 0.500; #local PQ_perna1[4] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_perna2[4] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_braco1[4] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_braco2[4] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_cabeca[4] = empacota(6, 0, 0, 0, 0, 0, 0); // frame 5 #local TQ[5] = 0.625; #local PQ_perna1[5] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_perna2[5] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_braco1[5] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_braco2[5] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_cabeca[5] = empacota(6, 0, 0, 0, 0, 0, 0); // frame 6 #local TQ[6] = 0.750; #local PQ_perna1[6] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_perna2[6] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_braco1[6] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_braco2[6] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_cabeca[6] = empacota(6, 0, 0, 0, 0, 0, 0); // frame 7 #local TQ[7] = 0.875; #local PQ_perna1[7] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_perna2[7] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_braco1[7] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_braco2[7] = empacota(6, 0, 0, 0, 0, 0, 0); #local PQ_cabeca[7] = empacota(6, 0, 0, 0, 0, 0, 0); // frame 8 // repete o 0 no acha_quadro // quadro #local k = acha_quadro(tt, NQ); // zera as variáveis dos angulos #local a1 = 0; #local a2 = 0; #local a3 = 0; #local a4 = 0; #local a5 = 0; #local a6 = 0; // interpola interpola_quadros(tt, TQ[k], PQ_perna1[k], TQ[k+1], PQ_perna1[k+1], a1, a2, a3, a4, a5, a6); #local thetas_perna1 = empacota(6, a1, a2, a3, a4, a5, a6); interpola_quadros(tt, TQ[k], PQ_perna2[k], TQ[k+1], PQ_perna2[k+1], a1, a2, a3, a4, a5, a6); #local thetas_perna2 = empacota(6, a1, a2, a3, a4, a5, a6); interpola_quadros(tt, TQ[k], PQ_braco1[k], TQ[k+1], PQ_braco1[k+1], a1, a2, a3, a4, a5, a6); #local thetas_braco1 = empacota(6, a1, a2, a3, a4, a5, a6); interpola_quadros(tt, TQ[k], PQ_braco2[k], TQ[k+1], PQ_braco2[k+1], a1, a2, a3, a4, a5, a6); #local thetas_braco2 = empacota(6, a1, a2, a3, a4, a5, a6); interpola_quadros(tt, TQ[k], PQ_cabeca[k], TQ[k+1], PQ_cabeca[k+1], a1, a2, a3, a4, a5, a6); #local thetas_cabeca = empacota(6, a1, a2, a3, a4, a5, a6); object{ union{ robo(PQ_perna1[k], PQ_perna2[k], PQ_braco1[k], PQ_braco2[k], PQ_cabeca[k]) cylinder{ <5,0,-100>, <5, 0, 100>, 0.5 texture{ tx_xadrez } } } rotate -90*y rotate -15*z } #end union{ cena(0) light_source { <0, 10, -3> color rgb < 200/255, 42/255, 222/255 > spotlight radius 100 falloff 30 tightness 10 point_at <0, 0, 0> } } #include "camlight.inc" #declare centro_cena = < 1.00, 0.00, 0.00 >; #declare raio_cena = 3*9.0; #declare dir_camera = < 10.00, 4.00, 7.00 >; #declare dist_camera = raio_cena; #declare intens_luz = 0.80; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)