// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2017-05-07 20:10:09 by stolfilocal // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.65, 0.60, 0.35 > } #declare tx_blue = texture{ pigment{ color rgb < 0.00, 0.00, 0.30 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_silver = texture{ pigment{ color rgb < 0.80, 0.80, 0.80 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_black = texture{ pigment{ color rgb < 0.10, 0.10, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } // ====================================================================== // DESCRIÇÃO DA CENA // Partes da cena: #declare n = 5; #declare m = 3; #declare roleta = seed(25); #include "eixos.inc" #macro robo(braco_graux, braco_grauy, braco_grauz, ante_grauy, mao_graux, mao_grauy, mao_grauz, polegar_grauz, garrap_grauz, dedo1_grauy, garra1_grauz, dedo2_grauy, garra2_grauz braco2_graux, braco2_grauy, braco2_grauz, ante2_grauy, mao2_graux, mao2_grauy, mao2_grauz, polegar2_grauz, garrap2_grauz, dedo12_grauy, garra12_grauz, dedo22_grauy, garra22_grauz) union{ //body cylinder{ <0.00, 0.00, 0.00> <0.00, 0.00, 4.00> 1.00 texture{ tx_blue } } //head cylinder{ <0.00, 0.00, 0.00> <0.00, 0.00, 4.55> 0.60 texture{ tx_blue } } //axle cylinder{ <0.00, -1.20, 0.20> <0.00, 1.20, 0.20> 0.10 texture{ tx_silver } } //wheel 1 cylinder{ <0.00, -1.20, 0.20> <0.00, -1.40, 0.20> 0.60 texture{ tx_blue } } //wheel 2 cylinder{ <0.00, 1.20, 0.20> <0.00, 1.40, 0.20> 0.60 texture{ tx_blue } } object{ braco(ante_grauy, mao_graux, mao_grauy, mao_grauz, polegar_grauz, garrap_grauz, dedo1_grauy, garra1_grauz, dedo2_grauy, garra2_grauz) rotate translate<0.00, -1.25, 3.50> } object{ braco(ante2_grauy, mao2_graux, mao2_grauy, mao2_grauz, polegar2_grauz, garrap2_grauz, dedo12_grauy, garra12_grauz, dedo22_grauy, garra22_grauz) rotate translate<0.00, -1.25, 3.50> scale<1.00, -1.00, 1.00> } } #end #macro braco(ante_grauy, mao_graux, mao_grauy, mao_grauz, polegar_grauz, garrap_grauz, dedo1_grauy, garra1_grauz, dedo2_grauy, garra2_grauz) union{ sphere{ <0.00, 0.00, 0.00>, 0.30 texture{ tx_black } } cylinder{ <0.00, 0.00, 0.00> <0.00, 0.00, 1.50> 0.10 texture{ tx_silver } } object{ antebraco(mao_graux, mao_grauy, mao_grauz, polegar_grauz, garrap_grauz, dedo1_grauy, garra1_grauz, dedo2_grauy, garra2_grauz) rotate<0.00, ante_grauy, 0.00> translate<0.00, 0.00, 1.50> } } #end #macro antebraco(mao_graux, mao_grauy, mao_grauz, polegar_grauz, garrap_grauz, dedo1_grauy, garra1_grauz, dedo2_grauy, garra2_grauz) union{ cylinder{ <0.00, 0.00, 0.00> <0.00, 0.00, 1.50> 0.10 texture{ tx_silver } } object { mao(polegar_grauz, garrap_grauz, dedo1_grauy, garra1_grauz, dedo2_grauy, garra2_grauz) rotate translate<0.00, 0.00, 1.50> } } #end #macro mao(polegar_grauz, garrap_grauz, dedo1_grauy, garra1_grauz, dedo2_grauy, garra2_grauz) union{ sphere{ <0.00, 0.00, 0.00>, 0.22 texture{ tx_black } } object{ dedo(garrap_grauz) rotate<0.00, 0.00, polegar_grauz> translate<0.00, 0.18, 0.00> } object{ dedo(garra1_grauz) rotate<90.00, dedo1_grauy, 0.00> translate<0.00, 0.16, 0.16> } object{ dedo(garra2_grauz) rotate<90.00, dedo2_grauy> translate<0.00, -0.16, 0.16> } } #end #macro dedo(garra_grauz) union{ box{ <0.00, 0.00, -0.11>, <0.15, 0.40, 0.11> texture{ tx_silver } } object{ dedogarra() rotate<0.00, 0.00, garra_grauz> translate <0.00, 0.40, 0.00> } } #end #macro dedogarra() union{ box{ <0.00, 0.00, -0.11>, <0.15, 0.40, 0.11> texture{ tx_silver } } } #end #macro interpola1(tt, tt0, tt1, vv0, vv1) #local rr = (tt - tt0)/(tt1 - tt0); #local vv = (1 - rr)*vv0 + rr*vv1; vv; #end #macro robo_vet(vet) 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], vet[18], vet[19], vet[20], vet[21], vet[22], vet[23], vet[24], vet[25]) #end #macro robo_interpola(tt, T0, T1, P0, P1) //posicao generica #local i = 0; #local pp = array[26]; #while (i < 26) #local pp[i] = interpola1(tt, T0, T1, P0[i], P1[i]) #local i = i + 1; #end object { robo_vet(pp) } #end #macro quadro_chave_0() #local P0 = array[26]; //braco 1 #local P0[0] = 0.00; #local P0[1] = 170.00; #local P0[2] = -90.00; //ante e mao 1 #local P0[3] = -40.00; #local P0[4] = -10.00; #local P0[5] = -20.00; #local P0[6] = 0.00; //dedos 1 #local P0[7] = 0.00; #local P0[8] = -45.00; #local P0[9] = 0.00; #local P0[10] = -45.00; #local P0[11] = 0.00; #local P0[12] = -45.00; //braco 2 #local P0[13] = 0.00; #local P0[14] = 170.00; #local P0[15] = -90.00; //ante e mao 2 #local P0[16] = -40.00; #local P0[17] = -10.00; #local P0[18] = -20.00; #local P0[19] = 0.00; //dedos 2 #local P0[20] = 0.00; #local P0[21] = -45.00; #local P0[22] = 0.00; #local P0[23] = -45.00; #local P0[24] = 0.00; #local P0[25] = -45.00; P0 #end #macro quadro_chave_1() #local pp0 = array[26]; //braco 1 #local pp0[0] = 55.00; #local pp0[1] = 180.00; #local pp0[2] = 80.00; //ante e mao 1 #local pp0[3] = -80.00; #local pp0[4] = -10.00; #local pp0[5] = 0.00; #local pp0[6] = 130.00; //dedos 1 #local pp0[7] = 0.00; #local pp0[8] = -45.00; #local pp0[9] = 10.00; #local pp0[10] = -45.00; #local pp0[11] = 10.00; #local pp0[12] = -45.00; //braco 2 #local pp0[13] = 0.00; #local pp0[14] = -45.00; #local pp0[15] = 90.00; //ante e mao 2 #local pp0[16] = 15.00; #local pp0[17] = 0.00; #local pp0[18] = 0.00; #local pp0[19] = -90.00; //dedos 2 #local pp0[20] = 0.00; #local pp0[21] = -30.00; #local pp0[22] = 0.00; #local pp0[23] = 0.00; #local pp0[24] = 0.00; #local pp0[25] = 0.00; pp0 #end #macro quadro_chave_2() #local pp0 = array[26]; //braco 1 #local pp0[0] = 55.00; #local pp0[1] = 180.00; #local pp0[2] = 80.00; //ante e mao 1 #local pp0[3] = -80.00; #local pp0[4] = -10.00; #local pp0[5] = 0.00; #local pp0[6] = 130.00; //dedos 1 #local pp0[7] = 0.00; #local pp0[8] = -45.00; #local pp0[9] = 10.00; #local pp0[10] = -45.00; #local pp0[11] = 10.00; #local pp0[12] = -45.00; //braco 2 #local pp0[13] = 0.00; #local pp0[14] = 15.00; #local pp0[15] = 90.00; //ante e mao 2 #local pp0[16] = 15.00; #local pp0[17] = 0.00; #local pp0[18] = 0.00; #local pp0[19] = -90.00; //dedos 2 #local pp0[20] = 0.00; #local pp0[21] = -30.00; #local pp0[22] = 0.00; #local pp0[23] = 0.00; #local pp0[24] = 0.00; #local pp0[25] = 0.00; pp0 #end #macro quadro_chave_3() #local pp0 = array[26]; //braco 1 #local pp0[0] = 10.00; #local pp0[1] = 170.00; #local pp0[2] = 0.00; //ante e mao 1 #local pp0[3] = -40.00; #local pp0[4] = -10.00; #local pp0[5] = -20.00; #local pp0[6] = 0.00; //dedos 1 #local pp0[7] = 0.00; #local pp0[8] = -45.00; #local pp0[9] = 0.00; #local pp0[10] = -45.00; #local pp0[11] = 0.00; #local pp0[12] = -45.00; //braco 2 #local pp0[13] = 0.00; #local pp0[14] = -150.00; #local pp0[15] = 90.00; //ante e mao 2 #local pp0[16] = 150.00; #local pp0[17] = 0.00; #local pp0[18] = 0.00; #local pp0[19] = -90.00; //dedos 2 #local pp0[20] = -30.00; #local pp0[21] = -45.00; #local pp0[22] = 30.00; #local pp0[23] = -30.00; #local pp0[24] = 20.00; #local pp0[25] = -20.00; pp0 #end #macro quadro(tf) #local T0 = 0; #local P0 = quadro_chave_0(); #local T1 = 0.3; #local P1 = quadro_chave_1(); #local T2 = 0.5; #local P2 = quadro_chave_2(); #local T3 = 0.9; #local P3 = quadro_chave_3(); #local T4 = 1; #if ((tf >= T0) & (tf <= T1)) #local qd = robo_interpola(tf, T0, T1, P0, P1); #elseif ((tf >= T1) & (tf <= T2)) #local qd = robo_interpola(tf, T1, T2, P1, P2); #elseif ((tf >= T2) & (tf <= T3)) #local qd = robo_interpola(tf, T2, T3, P2, P3); #else #local qd = robo_interpola(tf, T3, T4, P3, P0); #end qd #end // Aqui está a cena, finalmente: union{ object{ eixos(3.00) } object { quadro(clock) } } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 3.00 >; #declare raio_cena = 6.0; #declare dir_camera = < 10.00, 1.00, 1.00 >; #declare dist_camera = 12*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)