// 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.80, 0.80, 0.80> } // ====================================================================== // DESCRIÇÃO DA CENA // Partes da cena: #include "eixos.inc" #include "colors.inc" #declare NQ = 6; #declare tempo = array[NQ]; #declare tempo[0] = 0; #declare tempo[1] = 0.2; #declare tempo[2] = 0.4; #declare tempo[3] = 0.6; #declare tempo[4] = 0.8; #declare tempo[5] = 1; #declare angOE = array[NQ]; #declare angOE[0] = 110; #declare angOE[1] = 110; #declare angOE[2] = 110; #declare angOE[3] = 110; #declare angOE[4] = 110; #declare angOE[5] = 110; #declare angOD = array[NQ]; #declare angOD[0] = 40; #declare angOD[1] = 50; #declare angOD[2] = 60; #declare angOD[3] = 65; #declare angOD[4] = 50; #declare angOD[5] = 40; #declare angCE = array[NQ]; #declare angCE[0] = 30; #declare angCE[1] = 60; #declare angCE[2] = 90; #declare angCE[3] = 70; #declare angCE[4] = 60; #declare angCE[5] = 30; #declare angCD = array[NQ]; #declare angCD[0] = 65; #declare angCD[1] = 65; #declare angCD[2] = 120; #declare angCD[3] = 120; #declare angCD[4] = 120; #declare angCD[5] = 65; #declare angPE = array[NQ]; #declare angPE[0] = 0; #declare angPE[1] = 0; #declare angPE[2] = 0; #declare angPE[3] = 0; #declare angPE[4] = 0; #declare angPE[5] = 0; #declare angPD = array[NQ]; #declare angPD[0] = 0; #declare angPD[1] = 0; #declare angPD[2] = 0; #declare angPD[3] = 0; #declare angPD[4] = 0; #declare angPD[5] = 0; #declare angTE = array[NQ]; #declare angTE[0] = 45; #declare angTE[1] = 45; #declare angTE[2] = 50; #declare angTE[3] = 50; #declare angTE[4] = 45; #declare angTE[5] = 45; #declare angTD = array[NQ]; #declare angTD[0] = 30; #declare angTD[1] = 30; #declare angTD[2] = 30; #declare angTD[3] = 30; #declare angTD[4] = 30; #declare angTD[5] = 30; #declare angJE = array[NQ]; #declare angJE[0] = 30; #declare angJE[1] = 40; #declare angJE[2] = 50; #declare angJE[3] = 40; #declare angJE[4] = 35; #declare angJE[5] = 30; #declare angJD = array[NQ]; #declare angJD[0] = 20; #declare angJD[1] = 40; #declare angJD[2] = 45; #declare angJD[3] = 40; #declare angJD[4] = 30; #declare angJD[5] = 20; #declare angCoxaE = array[NQ]; #declare angCoxaE[0] = 30; #declare angCoxaE[1] = 50; #declare angCoxaE[2] = 60; #declare angCoxaE[3] = 90; #declare angCoxaE[4] = 60; #declare angCoxaE[5] = 30; #declare angCoxaD = array[NQ]; #declare angCoxaD[0] = 10; #declare angCoxaD[1] = 20; #declare angCoxaD[2] = 25; #declare angCoxaD[3] = 30; #declare angCoxaD[4] = 20; #declare angCoxaD[5] = 10; #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 #declare tamArt = 0.4; // Tamanho das articulacoes #declare tamPe = 1; // Tamanho do pe #declare tamCanela = 2.5; // Tamanho da canela #declare tamCoxa = 5; // Tamanho da coxa #declare tamAntebraco = 3; // Tamanho do antebraco #declare tamBraco = 3; // Tamanho do braco #declare tamTronco = 7; // Tamanho do tronco #declare espTronco = 1.8; // Espessura do tronco #declare raioCabeca = 2.2; // Raio da cabeca #declare articulacao = sphere { <0, 0, 0>, tamArt pigment { color rgb <1, 1, 1> } } #macro chao(altura) plane { z, altura pigment { checker color rgb <0.4, 0.4, 0.4> color rgb <0.6, 0.6, 0.6> scale 6} finish { reflection 0.2 ambient 0.3 diffuse 0.1 } } #end #macro pe(angulo) union { object { // Tornozelo articulacao } box { // Pe <-0.1, 0, -0.2>, <0.1, tamPe, 0.1> rotate <-angulo, 0, 0> } } #end #macro canela(angJ, angP, rotP) union { object { // Joelho articulacao } union { cylinder { // Canela <0, 0, 0>, <0, 0, -tamCanela>, tamArt * 0.6 } object { // Pe pe(angP) rotate <0, 0, rotP> translate <0, 0, -tamCanela> } rotate } } #end #macro perna(angC, angJ, angP, rotP) union { object { // Juncao com o corpo articulacao } union { cylinder { // Coxa <0, 0, 0>, <0, 0, -tamCoxa>, tamArt * 0.6 } object { // Canela + Pe canela(-angJ, angP, rotP) translate <0, 0, -tamCoxa> } rotate } } #end #macro antebraco(ang) union { object { // Cotovelo articulacao } cylinder { // Antebraco <0, 0, 0>, <0, 0, -tamAntebraco>, tamArt * 0.6 rotate } object { // Mao articulacao translate <0, 0, -tamAntebraco> rotate } } #end #macro braco(angB, angA) union { object { // Ombro articulacao } union { cylinder { // Braco <0, 0, 0>, <0, 0, -tamBraco>, tamArt * 0.6 } object { // Antebraco antebraco(angA) translate <0, 0, -tamBraco> } rotate } } #end #macro tronco() cylinder { <0, 0, -tamTronco / 2>, <0, 0, tamTronco/ 2>, espTronco } #end #macro orelha() intersection { cone { <0, 0, 0>, raioCabeca / 3 <0, 0, raioCabeca>, 0 } box { <-0.1, -raioCabeca, 0> <0.1, raioCabeca, raioCabeca> } } #end #macro cabeca() union { sphere { <0, 0, 0>, raioCabeca } object { orelha() translate <0, 0, raioCabeca> rotate <40, 0, 0> } object { orelha() translate <0, 0, raioCabeca> rotate <-40, 0, 0> } } #end #macro gato(angOE, angCE, angOD, angCD, angCoxaE, angJE, angTE, rotPE, angCoxaD, angJD, angTD, rotPD) union { object { // Cabeca cabeca() translate <0, 0, (tamTronco / 2) + raioCabeca> } object { // Tronco tronco() pigment { color rgb <0.3, 0.3, 0.3> } } object { // Braco esquerdo braco(angOE, angCE) translate <0, espTronco - (tamArt / 3), (tamTronco / 2) - (tamTronco / 10)> scale <1, -1, 1> } object { // Braco direito braco(angOD, angCD) translate <0, espTronco - (tamArt / 3), (tamTronco / 2) - (tamTronco / 10)> } object { // Perna esquerda perna(angCoxaE, angJE, angTE, rotPE) translate <0, espTronco - (tamArt / 3), - (tamTronco / 2)> scale <1, -1, 1> } object { // Perna direita perna(angCoxaD, angJD, angTD, rotPD) translate <0, espTronco - (tamArt / 3), - (tamTronco / 2)> } } #end #macro gato_dancando(fase) #local i = quadro_anterior(fase); #local oe = interpola(tempo[i], angOE[i], tempo[i + 1], angOE[i + 1], fase); #local od = interpola(tempo[i], angOD[i], tempo[i + 1], angOD[i + 1], fase); #local ce = interpola(tempo[i], angCE[i], tempo[i + 1], angCE[i + 1], fase); #local cd = interpola(tempo[i], angCD[i], tempo[i + 1], angCD[i + 1], fase); #local px = interpola(tempo[i], angPE[i], tempo[i + 1], angPE[i + 1], fase); #local pd = interpola(tempo[i], angPD[i], tempo[i + 1], angPD[i + 1], fase); #local te = interpola(tempo[i], angTE[i], tempo[i + 1], angTE[i + 1], fase); #local td = interpola(tempo[i], angTD[i], tempo[i + 1], angTD[i + 1], fase); #local je = interpola(tempo[i], angJE[i], tempo[i + 1], angJE[i + 1], fase); #local jd = interpola(tempo[i], angJD[i], tempo[i + 1], angJD[i + 1], fase); #local coxae = interpola(tempo[i], angCoxaE[i], tempo[i + 1], angCoxaE[i + 1], fase); #local coxad = interpola(tempo[i], angCoxaD[i], tempo[i + 1], angCoxaD[i + 1], fase); object { gato(oe, ce, od, cd, coxae, je, te, px, coxad, jd, td, pd) scale <0.5, 0.5, 0.5> } #end // Aqui está a cena, finalmente: union { object { chao(-20) } object { gato_dancando(clock) } } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 0.00 >; #declare raio_cena = 30.0; #declare dir_camera = < 2.00, 0, 0.00 >; #declare dist_camera = 60.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)