// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2010-03-04 15:44:01 by stolfi // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_1 = texture{ pigment{ color rgb < 2.10, 0.00, 0.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_2 = texture{ pigment{ color rgb < 0.75, 0.54, 0.06 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } // ====================================================================== // DESCRIÇÃO DA CENA #macro antebraco () union { cylinder{ < 0.00, 0.00, 0.0 >, < 0.0, 0.00, 1.40 >, 0.37 texture { tx_2 } } sphere{ < 0,0,1.50 >, 0.45 texture { tx_2 } } } #end #macro braco (a) union { cylinder{ < 0.00, 0.00, 0.0 >, < 0.00, 0.00, 1.5 >, 0.4 texture { tx_2 } } object { antebraco() rotate<0,a,0> translate<0,0,1.5>} } #end #macro corpo (braco_esq, braco_dir, ante_esq, ante_dir, coxa_esq, coxa_dir, perna_esq, perna_dir, pe_esq, pe_dir) union{ cone{ < 0.00, 0.00, 0.00 >, 2.5 < 0.00, 0.00, 5.00 >, 1 texture { tx_1 } } cone{ < 0.00, 0.00, 7.5 >, 1.2 < 0.00, 0.00, 10.00 >, 0 texture { tx_1 } } sphere{ < 0,0,0 >, 1.5 translate <0,0,6.5> texture { tx_2 } } cylinder{ < 0.00, 0.00, 6.5 >, < 0.00, 4.00, 6.5 >, 0.2 texture { tx_2 } } object { braco(ante_esq) rotate< 0,braco_esq,0> translate<1,0,4>} object { braco(ante_dir) rotate< 0,braco_dir,0> translate<-1,0,4>} object { coxa(perna_esq, pe_esq) rotate< 0,coxa_esq,0> translate<1,0,0>} object { coxa(perna_dir, pe_dir) rotate< 0,coxa_dir,0> translate<-1,0,0>} } #end #macro coxa (a,b) union{ cylinder{ < 0.00, 0.00, 0.0 >, < 0.0, 0.00, -1.40 >, 0.5 texture { tx_2 } } object { perna(b) rotate< 0,a,0> translate<0,0,-1.4>} } #end #macro perna (a) union { cylinder{ < 0.00, 0.00, 0.0 >, < 0.0, 0.00, -1.40 >, 0.45 texture { tx_2 } } object { peh() rotate<0,a,0> translate<0,0,-1.40> } } #end #macro peh () cylinder{ < -1, 0.00, 0.0 >, < 1, 0.00, 0.0 >, 0.45 texture { tx_2 } } #end //----------------------------------------- Animacao ------------------------------------------ #declare NQ = 11;//numero de quadros #declare arg1 = array[NQ] {135, 90, 70, 50, 30, 15, 30, 50, 70, 90, 135} #declare arg2 = array[NQ] {-135, -100, -90, -50, -30, -135, -90, -50, -30, -50, -135} #declare arg3 = array[NQ] {0, -30, -50, -30, 0, -30, -50, -70, -50, -30, 0} #declare arg4 = array[NQ] {0, -30, -50, -70, -50, -30, -0, -30, -0, -30, 0} #declare arg5 = array[NQ] {0, -90, -45, 0, -45, -90, -45, 0, 0, 0, 0} #declare arg6 = array[NQ] {0, 10, 20, 30, 40, 45, 50, 55, 60, 60, 0} #declare arg7 = array[NQ] {0, 30, 0, 30, 0, 30, 0, 30, 0, 0, 0} #declare arg8 = array[NQ] {0, -15, -30, -45, -60, -70, -80, -90, -90, -60, 0} #declare arg9 = array[NQ] {0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0} #declare arg10 = array[NQ] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} #declare tempo= array[NQ] {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0} #macro interpola(f0,v0,f1,v1,f) #local ss = (f-f0)/(f1-f0); #local rr = 1 - ss; (rr * v0 + ss * v1) #end #macro quadro_anterior(fase) #local i=0; #while(i=fase)) #local resp = i; #end #local i=i+1; #end resp #end #macro movimento(fase) #local quadro_ant = quadro_anterior(fase); #local be = interpola(tempo[quadro_ant], arg1[quadro_ant], tempo[quadro_ant+1], arg1[quadro_ant+1], fase); #local bd = interpola(tempo[quadro_ant], arg2[quadro_ant], tempo[quadro_ant+1], arg2[quadro_ant+1], fase); #local ae = interpola(tempo[quadro_ant], arg3[quadro_ant], tempo[quadro_ant+1], arg3[quadro_ant+1], fase); #local ad = interpola(tempo[quadro_ant], arg4[quadro_ant], tempo[quadro_ant+1], arg4[quadro_ant+1], fase); #local ce = interpola(tempo[quadro_ant], arg5[quadro_ant], tempo[quadro_ant+1], arg5[quadro_ant+1], fase); #local cd = interpola(tempo[quadro_ant], arg6[quadro_ant], tempo[quadro_ant+1], arg6[quadro_ant+1], fase); #local pe = interpola(tempo[quadro_ant], arg7[quadro_ant], tempo[quadro_ant+1], arg7[quadro_ant+1], fase); #local pd = interpola(tempo[quadro_ant], arg8[quadro_ant], tempo[quadro_ant+1], arg8[quadro_ant+1], fase); #local fe = interpola(tempo[quadro_ant], arg9[quadro_ant], tempo[quadro_ant+1], arg9[quadro_ant+1], fase); #local fd = interpola(tempo[quadro_ant], arg10[quadro_ant], tempo[quadro_ant+1], arg10[quadro_ant+1], fase); object {corpo(be,bd,ae,ad,ce,cd,pe,pd,fe,fd)} #end //---------------------------------------------------------------------------------------------------------------------- // Aqui está a cena, finalmente: object { movimento(clock)} #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.00 >; #declare raio_cena = 20.0; #declare dir_camera = < 0.00, 5.00, 0.00 >; #declare dist_camera = 16.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)