// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2021-12-11 14:10:21 by stolfi // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_verde = texture{ pigment{ color rgb < 0.15, 1.00, 0.15 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_vermelho = texture{ pigment{ color rgb < 1.00, 0.10, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_azul = texture{ pigment{ color rgb < 0.10, 0.10, 1.00 > } finish{ diffuse 0.9 ambient 0.1 } } // ====================================================================== // DESCRIÇÃO DA CENA // MACROS QUE CONSTITUEM OS OBJETOS DA CENA #macro pe() union{ cylinder{ <0, 0, -40>, <10, 0, -40>, 4 texture { tx_azul } } sphere{ <0, 0, 0> 4 texture { tx_azul } } sphere{ <10, 0, -40> 4 texture { tx_azul } } cylinder{ <0, 0, 0>, <0, 0, -40>, 4 texture { tx_azul } } sphere{ <0, 0, -40> 4 texture { tx_verde } } } #end #macro perna(p_x) union{ sphere{ <0, 0, 0> 4 texture { tx_verde } } cylinder{ <0, 0, 0>, <-40, 0, 0>, 4 texture { tx_azul } } sphere{ <-40, 0, 0> 4 texture { tx_verde } } object{ pe() rotate p_x*x } } #end #macro garra () cone{ <0, -40, 0>, 0, <0, 0, 0>, 2 texture {tx_vermelho} } #end #macro braco(g_z) #local garra1 = object{ garra() } #local garra2 = object{ garra() } union{ sphere{ <0, 0, 0>, 6 texture {tx_verde} } object{ garra1 rotate g_z*z } object{ garra2 rotate -g_z*z } cylinder{ <0, 0, 0>, <0, 60, 0>, 4 texture { tx_vermelho } } } #end #macro robo(pe1, pe2, pe3, pe4, perna1_z, perna2_z, perna3_z, perna4_z, perna1_y, perna2_y, perna3_y, perna4_y, garra1, garra2, braco1_z, braco2_z, braco1_y, braco2_y, braco1_x, braco2_x) #local raio = 10; #local perna1 = object{ perna(pe1) translate <40, 0, 0>} #local perna2 = object{ perna(pe2) translate <40, 0, 0> scale <-1, 1, 1>} #local perna3 = object{ perna(pe3) translate <40, 0, 0>} #local perna4 = object{ perna(pe4) translate <40, 0, 0> scale <-1, 1, 1>} #local braco1 = object{ braco(garra1) translate <0, -60, 0>} #local braco2 = object{ braco(garra2) translate <0, -60, 0>} union{ cylinder{ <0, 100, 0>, <0, 0, 0>, raio texture{ tx_azul } } sphere{ <0, 0, 0> raio texture { tx_azul } } sphere{ <-raio, 80, 0> 5 texture { tx_verde } } sphere{ 5 texture { tx_verde } } sphere{ <-raio, 20, 0> 5 texture { tx_verde } } sphere{ 7 texture { tx_verde } } sphere{ <-raio, 0, 0> 7 texture { tx_verde } } object{ perna1 rotate perna1_z*z rotate perna1_y*y translate } object{ perna2 rotate perna2_z*z rotate perna2_y*y translate <-raio, 80, 0> } object{ perna3 rotate perna3_z*z rotate perna3_y*y translate } object{ perna4 rotate perna4_z*z rotate perna4_y*y translate <-raio, 20, 0> } object{ braco1 rotate braco1_z*z rotate braco1_y*y rotate braco1_x*x translate } object{ braco2 rotate braco2_z*z rotate braco2_y*y rotate braco2_x*x translate <-raio, 0, 0> } } #end #macro robo_vet(vetor) object{ robo(vetor[0], vetor[1], vetor[2], vetor[3], vetor[4], vetor[5], vetor[6], vetor[7], vetor[8], vetor[9], vetor[10], vetor[11], vetor[12], vetor[13], vetor[14], vetor[15], vetor[16], vetor[17], vetor[18], vetor[19]) } #end #macro robo_mov(tt) #local quadro1 = array[20]; #local quadro1[0] = 0; // pe1 #local quadro1[1] = 0; // pe2 #local quadro1[2] = 0; // pe3 #local quadro1[3] = 0; // pe4 #local quadro1[4] = -10; // perna1_z #local quadro1[5] = -30; // perna2_z #local quadro1[6] = +10; // perna3_z #local quadro1[7] = +30; // perna4_z #local quadro1[8] = 0; // perna1_y #local quadro1[9] = 20; // perna2_y #local quadro1[10] = 0; // perna3_y #local quadro1[11] = 20; // perna4_y #local quadro1[12] = 0; // garra1 #local quadro1[13] = 0; // garra2 #local quadro1[14] = 30; // braco1_z #local quadro1[15] = -30; // braco2_z #local quadro1[16] = 0; // braco1_y #local quadro1[17] = 0; // braco2_y #local quadro1[18] = 0; // braco1_x #local quadro1[19] = 0; // braco2_x #local quadro2 = array[20]; #local quadro2[0] = 0; // pe1 #local quadro2[1] = 0; // pe2 #local quadro2[2] = 0; // pe3 #local quadro2[3] = 0; // pe4 #local quadro2[4] = +30; // perna1_z #local quadro2[5] = +10; // perna2_z #local quadro2[6] = -30; // perna3_z #local quadro2[7] = -10; // perna4_z #local quadro2[8] = 0; // perna1_y #local quadro2[9] = 0; // perna2_y #local quadro2[10] = 0; // perna3_y #local quadro2[11] = 0; // perna4_y #local quadro2[12] = 30; // garra1 #local quadro2[13] = -30; // garra2 #local quadro2[14] = 30; // braco1_z #local quadro2[15] = -30; // braco2_z #local quadro2[16] = 0; // braco1_y #local quadro2[17] = 0; // braco2_y #local quadro2[18] = 0; // braco1_x #local quadro2[19] = 0; // braco2_x #local quadro3 = array[20]; #local quadro3[0] = 0; // pe1 #local quadro3[1] = 0; // pe2 #local quadro3[2] = 0; // pe3 #local quadro3[3] = 0; // pe4 #local quadro3[4] = 0; // perna1_z #local quadro3[5] = 0; // perna2_z #local quadro3[6] = -30; // perna3_z #local quadro3[7] = 30; // perna4_z #local quadro3[8] = 0; // perna1_y #local quadro3[9] = 0; // perna2_y #local quadro3[10] = 0; // perna3_y #local quadro3[11] = 0; // perna4_y #local quadro3[12] = 0; // garra1 #local quadro3[13] = 0; // garra2 #local quadro3[14] = 0; // braco1_z #local quadro3[15] = 0; // braco2_z #local quadro3[16] = 0; // braco1_y #local quadro3[17] = 0; // braco2_y #local quadro3[18] = 0; // braco1_x #local quadro3[19] = 0; // braco2_x #local quadro4 = array[20]; #local quadro4[0] = -40; // pe1 #local quadro4[1] = -40; // pe2 #local quadro4[2] = 0; // pe3 #local quadro4[3] = 0; // pe4 #local quadro4[4] = 0; // perna1_z #local quadro4[5] = 0; // perna2_z #local quadro4[6] = -30; // perna3_z #local quadro4[7] = 30; // perna4_z #local quadro4[8] = 0; // perna1_y #local quadro4[9] = 0; // perna2_y #local quadro4[10] = 0; // perna3_y #local quadro4[11] = 0; // perna4_y #local quadro4[12] = 30; // garra1 #local quadro4[13] = -30; // garra2 #local quadro4[14] = 0; // braco1_z #local quadro4[15] = 0; // braco2_z #local quadro4[16] = 0; // braco1_y #local quadro4[17] = 0; // braco2_y #local quadro4[18] = 30; // braco1_x #local quadro4[19] = 30; // braco2_x #local frame = array[20]; #local N = 20; #local i = 0; #if(tt <= 0.66) #if(tt <= 0.33) #local tt0 = 0; #local tt1 = 0.33; #while(i < N) #local frame[i] = interpola(tt, tt0, tt1, quadro1[i], quadro2[i]); #local i = i + 1; #end //#end #else #local tt0 = 0.33; #local tt1 = 0.66; #local i = 0; #while(i < N) #local frame[i] = interpola(tt, tt0, tt1, quadro2[i], quadro3[i]); #local i = i + 1; #end #end #else #local tt0 = 0.66; #local tt1 = 1; #local i = 0; #while(i < N) #local frame[i] = interpola(tt, tt0, tt1, quadro3[i], quadro1[i]); #local i = i + 1; #end #end object{ robo_vet(frame) } #end #macro interpola(tt, tt0, tt1, vv0, vv1) #local rr = (tt - tt0)/(tt1 - tt0); #local vv = (1 - rr)*vv0 + rr*vv1; vv #end #include "eixos.inc" #local tempo = 0; #local tempoF = 1; #local passo = 0.1; #local c = 1; object{ robo_mov(clock) } #include "camlight.inc" #declare centro_cena = < 10, 10, 0>; #declare raio_cena = 200; #declare dir_camera = < 10, -20, 10 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)