// 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_cabeca = texture{ pigment{ color rgb < 1, 1, 0.1 > } finish{ diffuse 0.4 ambient 0.1 } } #declare tx_pe = texture{ pigment{ color rgb < 0, 0, 0 > } finish{ diffuse 1 ambient 0.1 } } #declare tx_corpo = pigment { wood turbulence 0.05 scale <0.2, 0.2, 1> color_map { [0.1 rgb <0.42, 0.26, 0.15>] [0.9 rgb <0.52, 0.37, 0.26>] } } // ====================================================================== #declare NQ = 6; #declare fq = array[NQ]; #declare argA = array[NQ]; #declare argB = array[NQ]; #declare argC = array[NQ]; #declare fq[0] = 0.0; #declare fq[1] = 0.2; #declare fq[2] = 0.4; #declare fq[3] = 0.6; #declare fq[4] = 0.8; #declare fq[5] = 1.0; #declare argA[0] = -30; #declare argA[1] = -30; #declare argA[2] = 0; #declare argA[3] = 0; #declare argA[4] = 0; #declare argA[5] = -30; #declare argB[0] = 0; #declare argB[1] = -30; #declare argB[2] = 0; #declare argB[3] = -30; #declare argB[4] = 30; #declare argB[5] = 0; #declare argC[0] = 30; #declare argC[1] = 0; #declare argC[2] = 30; #declare argC[3] = 0; #declare argC[4] = 30; #declare argC[5] = 30; // DESCRIÇÃO DA CENA #declare raio = 1.000; // Partes da cena: #declare orelha = cone { <0,0,0>,0.5,<0,0,1>,0 texture{ tx_cabeca } } #declare coxa = cylinder { <0,-1.5,0>, <0,1.5,0>, 0.4 texture{ tx_corpo } } #declare braco = cylinder { <0,-1.5,0>, <0,1.5,0>, 0.4 texture{ tx_corpo } } #declare canela = cylinder { <0,0,0>, <0,3,0>, 0.4 texture{ tx_pe } } #declare antebraco = cylinder { <0,0,0>, <0,2,0>, 0.3 texture{ tx_pe } } #declare pe = box{ <0,0,0><2,1,1> texture { tx_pe } } #macro foot() object{ pe translate<0,0,0> } #end #macro prebraco(ante) object{ antebraco rotate} #end #macro arm(brac,ante,dist) union{ object{ braco } object{ prebraco(ante) translate<0,dist,0> } } #end #macro perna(cox,anpern,dist,peh,distpeh) union{ object{ coxa } object{ anteperna(anpern,dist,peh,distpeh) translate<0,dist,0> } } #end #macro anteperna(anpern,dist,peh,distpeh) union{ object{ canela rotate } // object{ foot() rotate translate<0,dist,0>} } #end #macro corpo() union{ //cabeca sphere{ < 0, 0, 0 >, raio texture{ tx_cabeca } } //corpo sphere{ < 0, 0, -3*raio+0.2 >, raio*2 texture{ tx_corpo } } object{ orelha translate<0,0,1> rotate<-30,0,0> } object{ orelha translate<0,0,1> rotate<30,0,0> } } #end #macro gato(brac,ante,cox,anpern,peh) union{ object{ corpo() translate<0,0,3> } object{ arm(brac,ante,1.5) rotate<-brac,0,0> translate<0,3,1>} object{ arm(brac,180-ante,-1.5) rotate translate<0,-3,1> } object{ perna(cox,anpern,1.5,peh,3) rotate<-cox,0,0> translate<0,1,-2> } object{ perna(cox,180-anpern,-1.5,peh,-3) rotate translate<0,-1,-2> } } #end #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 < NQ - 1) #if ( (fq[i] <= fase) & (fq[i+1] >= fase) ) #local resp = i; #end #local i = i+1; #end resp; #end #macro gato_dancando(fase) #local cox = 90; #local peh = 0; #local q = quadro_anterior(fase); #local ta = fase; #local brac = interpola(fq[q],argA[q],fq[q+1],argA[q+1],ta); #local ante = interpola(fq[q],argB[q],fq[q+1],argB[q+1],ta); #local antepern = interpola(fq[q],argC[q],fq[q+1],argC[q+1],ta); object{gato(brac,ante,cox,antepern,peh)} #end #declare relogio = cylinder{ <0,0,0>, <0,2,0>, raio-0.5 } #include "eixos.inc" // Aqui está a cena, finalmente: //braco, antebraco, coxa, canela gato_dancando(clock) #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 0.00 >; #declare raio_cena = 12.0; #declare dir_camera = < 21.00, 0.00, 0.00 >; //#declare dir_camera = < 14.00, 7.00, 4.00 >; #declare dist_camera = 16.0; #declare intens_luz = 2.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)