// 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_tronco = texture{ pigment{ color rgb < 0.65, 0.16, 0.16 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_chao = texture{ pigment{ color rgb < 0.15, 0.16, 0.16 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_folha = texture{ pigment{ color rgb < 0.13, 0.55, 0.13 > } finish{ diffuse 0.9 ambient 0.8 } } #declare tx_xadrez = texture{ pigment{ checker color rgb < 0, 0, 0 >, color rgb < 1, 1, 1 > filter 0.9} finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } // ====================================================================== // DESCRIÇÃO DA CENA // Partes da cena: #declare altura_inicial = 40; #declare profundidade = 4; #declare chao = box{ <-50,-50,-1>, <+50,+50,0> texture{ tx_chao } } #macro esfera(raio) sphere { <0, 0, 0>, raio texture {tx_folha} } #end #macro meu_cilindro(tamanho) union { object { esfera(1.0) translate<0, 0, 0>} cylinder { <0, 0, 0>, <0, 0, tamanho>, 1.0 } object { esfera(1.0) translate<0, 0, tamanho>} } #end #macro pe(tamanho) object { meu_cilindro(tamanho) texture { tx_tronco } } // pe #end #macro batata(tamanho) object { meu_cilindro(tamanho) texture { tx_folha } } // batata #end #macro coxa(tamanho) object { meu_cilindro(tamanho) texture { tx_folha } } // coxa #end #macro mao(tamanho) object { meu_cilindro(tamanho) texture { tx_tronco } } // mao #end #macro antebraco(tamanho) object { meu_cilindro(tamanho) texture { tx_folha } } // antebraco #end #macro braco(tamanho) object { meu_cilindro(tamanho) texture { tx_folha } } // braco #end #macro batata_coelho(a, b, c) #local angulo_pe = -90 + a; #local angulo_pe_batata = 45 + b; #local tamanho_pe = 2; #local tamanho_batata = 4; union { object {pe(tamanho_pe) rotate<0, 0, -tamanho_pe>} object {batata(tamanho_batata)} translate<0, -cos((pi/180) * angulo_pe_batata) * tamanho_batata, -sin((pi/180) * angulo_pe_batata) * tamanho_batata> } #end #macro perna_coelho (a, b, c) #local angulo_coxa_batata = 45 + c; #local tamanho_coxa = 3; union { object {batata_coelho(a, b, c)} object {coxa(tamanho_coxa) rotate} translate<0, cos((pi/180) * angulo_coxa_batata) * tamanho_coxa, -sin((pi/180) * angulo_coxa_batata) * tamanho_coxa> } #end #macro antebraco_coelho (a, b, c) #local angulo_mao = -90 + a; #local angulo_mao_antebraco = 45 + b; #local tamanho_mao = 1; #local tamanho_antebraco = 2; union { object {mao(tamanho_mao) rotate} object {antebraco(tamanho_antebraco) rotate} translate<0, -cos((pi/180) * angulo_mao_antebraco) * tamanho_antebraco, -sin((pi/180) * angulo_mao_antebraco) * tamanho_antebraco> } #end #macro braco_coelho (a, b, c) #local angulo_braco_antebraco = 45 + c; #local tamanho_braco = 2; union { object {antebraco_coelho(a, b, c)} object { braco(tamanho_braco) rotate } translate<0, cos((pi/180) * angulo_braco_antebraco) * tamanho_braco, -sin((pi/180) * angulo_braco_antebraco) * tamanho_braco> } #end #macro orelha() union { object{ esfera(1.0) } scale<1, 1, 4> } #end #macro cabeca(raio) union { object{ esfera(raio) } object{ orelha() translate<-2, 0, raio/2 + 1> } object{ orelha() translate<2, 0, raio/2 + 1> } } #end #macro corpo(altura_corpo) union { object{ cabeca(3) translate<0, 0, altura_corpo + 3 - 1> } object{ esfera(1) scale<4, 3, altura_corpo> } // corpo } #end #macro coelho(pda, pdb, pdc, pea, peb, pec, bda, bdb, bdc, bea, beb, bec) union { #local altura_corpo = 8; object{ corpo(altura_corpo) } object{ perna_coelho( pea, peb, pec) translate<-4, 0, -(3/5) * altura_corpo> } object{ perna_coelho( pda, pdb, pdc) translate<+4, 0, -(3/5) * altura_corpo> } object{ braco_coelho( bea, beb, bec) translate<-4, 0, +(3/5) * altura_corpo> } object{ braco_coelho( bda, bdb, bdc) translate<+4, 0, +(3/5) * altura_corpo> } } #end #macro coelho_dancando(fase) #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=FASE)) #local quad=i; #end #local i=i+1; #end quad #end #include "eixos.inc" // Aqui está a cena, finalmente: #declare NQ = 6; // Numero de quadros #declare P1 = array[NQ]; #declare P1[0] = 180; #declare P1[1] = 135; #declare P1[2] = 90; #declare P1[3] = 90; #declare P1[4] = 135; #declare P1[5] = 180; #declare P2 = array[NQ]; #declare P2[0] = 180; #declare P2[1] = 150; #declare P2[2] = 45; #declare P2[3] = 45; #declare P2[4] = 150; #declare P2[5] = 180; #declare B1 = array[NQ]; #declare B1[0] = 45; #declare B1[1] = 115; #declare B1[2] = 160; #declare B1[3] = 160; #declare B1[4] = 115; #declare B1[5] = 45; #declare B2 = array[NQ]; #declare B2[0] = 180; #declare B2[1] = 150; #declare B2[2] = 45; #declare B2[3] = 45; #declare B2[4] = 150; #declare B2[5] = 180; #declare fq = 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; union{ object { eixos(10.0) } //object{ chao } //object {coelho(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)} //object {coelho(15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15) translate<0, 20, 0>} object {coelho(0, 180, 180, 0, 180, 180, 0, 180, 180, 0, 180, 180)} } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 0.00 >; #declare raio_cena = 50.0; #declare dir_camera = < 100.00, 1.00, 1.00 >; #declare dist_camera = 50.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)