// ====================================================================== // CORES E TEXTURAS #include "textures.inc" #include "debug.inc" #declare PigCorpo = pigment { bozo color_map { [0.1 rgbt <0.8, 0.8, 0.8, 0.0>] [0.5 rgbt <1.0, 1.0, 1.0, 0.0>] } } #declare PigOlho = pigment{ color rgb <1,1,1> } #declare PigPupila = pigment{ color rgb <.1,.1,.1> } background{ color rgb < 0.75, 0.80, 0.85 > } // ====================================================================== // DESCRIÇÃO DA CENA #macro membro(larg1, larg2, comp) sphere { <0,0,0> 1.2 * larg1 pigment { PigCorpo } } cone { <0,0,0> 1.2 * larg1 <0,0,comp> larg2 pigment { PigCorpo } } #end #macro orelha(direcaoPonta, direcaoFrente) #local dirPonta = vnormalize(direcaoPonta); #local dirFrente = vnormalize(direcaoFrente); difference { cone { 0.8*dirPonta 0.4 3*dirPonta 0 pigment {PigCorpo turbulence 1} } cone { 0.8*dirPonta 0.4 3*dirPonta 0 pigment {PigCorpo turbulence 1} translate 0.2*dirFrente - 0.2*dirPonta } } #end #macro olho(direcao) sphere { 0.88 * vnormalize(direcao) .3 pigment { PigOlho } } sphere { 0.94 * vnormalize(direcao) .25 pigment { PigPupila } } #end #macro cabeca() union { sphere { <0,0,0> 1 pigment {PigCorpo turbulence 1} } orelha(<-1,-1,2>, <0,-1,0>) orelha(< 1,-1,2>, <0,-1,0>) olho(<-.5,-.7,.2>) olho(< .5,-.7,.2>) sphere { 0.75 * vnormalize(<0,-1,-.5>) .5 pigment { PigCorpo } } sphere { 1.2 * vnormalize(<0,-1,-.5>) .25 pigment { PigPupila } } translate <0,0,1> } #end #macro cabecaPescoco() membro(.4, .3, .5 ) object { cabeca() translate<0,0,0.3> } #end #macro mao() sphere { <0,0,0>, .4 pigment { PigCorpo } scale<1, .5, 1> translate <0,0,.2> } #end #macro antebracao(rotPunho) membro(.3, .2, 1.4) object { mao() rotate rotPunho translate <0,0,1.4> } #end #macro braco(rotAntebraco, rotPunho) membro(.4, .3, 1.2) union { antebracao(rotPunho) rotate rotAntebraco rotate <0,0,90> translate <0,0,1.2> } #end #macro pe() intersection { sphere { <0,0,0>, .4 pigment { PigPupila } scale <1, 3, 1.5> } box { <-10, -.3, 0> <10, 10, -10> pigment { PigPupila } } translate <0,0,.2> } #end #macro perna(rotPe) membro(.3, .25, 1.8) object { pe() rotate rotPe translate <0,0,1.8> } #end #macro coxa(rotPerna, rotPe) membro(.5, .3, 1.7) union { perna(rotPe) rotate rotPerna rotate <0,0,180> translate <0,0,1.7> } #end #macro corpo( rotPescoco, rotBraco1, rotAntebraco1, rotPunho1, rotBraco2, rotAntebraco2, rotPunho2, rotCoxa1, rotPerna1, rotPe1, rotCoxa2, rotPerna2, rotPe2 ) //Pança sphere { <0,0,0> 1 pigment { PigCorpo } scale <1,1,1.5> } //Pescoço union { cabecaPescoco() rotate rotPescoco translate<0,0,1.2> } //Braço 1 union { braco(rotAntebraco1, rotPunho1) rotate rotBraco1 rotate <0,0,-90> rotate <0,135,0> translate<0.8,0,1> } //Braço 2 union { braco(rotAntebraco2, rotPunho2) rotate rotBraco2 rotate <0,0,-90> rotate <0,135,0> translate<0.8,0,1> scale<-1,1,1> } //Perna 1 union { coxa(rotPerna1, rotPe1) rotate rotCoxa1 scale <-1,1,1> rotate <0,180,0> translate<0.6,0,-1.2> } //Perna 2 union { coxa(rotPerna2, rotPe2) rotate rotCoxa2 scale <1,1,1> rotate <0,180,0> translate<-0.6,0,-1.2> } #end #macro corpoA(argArray) corpo( argArray[0], argArray[1], argArray[2], argArray[3], argArray[4], argArray[5], argArray[6], argArray[7], argArray[8], argArray[9], argArray[10], argArray[11], argArray[12] ) #end /* RotPescoço <30,0,0>, <-30,0,0> => Cabeça abaixada, Cabeça levantada <0,0,30>, <0,0,-30> => Olhando pra esquerda, olhando pra direita <0,30,0>, <0,-30,0> => Cabeça tombada pra esquerda, tombada pra direita RotBraço <30,0,0>, <-30,0,0> => Braço levantado, braço abaixado <30,0,0>, <-30,0,0> => Braço pra frente, braço pra tras RotAntebraço <0,0,0> - <90,0,0> => Cotovelo reto, cotovelo fechado RotPunho <-30,0,0> - <30,0,0> => Desmunheca pra fora, desmunheca pra dentro <0,0,-30> - <0,0,30> => Gira a mão ao redor do braço RotCoxa <0,0,0> - <90,0,0> => Perta para baixo => perna levantada <0,0,0> - <0,90,0> => Perta fechada => perna aberta RotPerna <0,0,0> - <90,0,0> => Joelho esticado => Joelho dobrado RotPe <0,0,0> - <90,0,0> => Pé normal => ponta do pé */ #declare NQ = 6; #declare Transform = array[NQ]; #declare Transform[0] = array[13] { <0,0,20>, //Pescoço <45,0,0>, <70,0,0>, <40,0,0>, //Braço 1 <15,85,0>, <25,0,0>, <0,0,0>, //Braço 2 <70,0,0>,<140,0,0>,<0,0,0>, //Perna 1 <30,0,0>,<60,0,0>,<-30,0,0> //Perna 2 }; #declare Transform[1] = array[13] { <-10,0,-20>, //Pescoço <30,0,0>, <50,0,-70>, <40,0,0>, //Braço 1 <70,0,0>, <50,0,-70>, <40,0,0>, //Braço 1 <30,70,0>,<40,0,0>,<40,0,0>, //Perna 1 <30,0,50>,<60,0,0>,<-30,0,0> //Perna 2 }; #declare Transform[2] = array[13] { <0,0,40>, //Pescoço <110,0,0>, <20,0,-70>, <40,0,0>, //Braço 1 <110,0,0>, <20,0,-70>, <40,0,0>, //Braço 1 <70,0,70>,<120,0,0>,<70,0,0> //Perna 1 <30,0,0>,<60,0,0>,<50,0,0> //Perna 2 }; #declare Transform[3] = array[13] { <10,0,0>, //Pescoço <10,10,0>, <30,0,-50>, <30,0,10>, //Braço 1 <10,10,0>, <30,0,-50>, <30,0,10>, //Braço 2 <30,0,0>,<60,0,0>,<50,0,0>, //Perna 1 <30,0,0>,<60,0,0>,<50,0,0> //Perna 2 }; #declare Transform[4] = array[13] { <30,0,0>, //Pescoço <40,0,80>, <70,0,0>, <0,0,30>, //Braço 1 <40,0,80>, <70,0,0>, <0,0,30>, //Braço 2 <30,0,0>,<60,0,0>,<-20,0,0>, //Perna 1 <30,0,0>,<60,0,0>,<-20,0,0> //Perna 2 } #declare Transform[5] = Transform[0]; #declare TransformTime = array[NQ] { 0, 0.2, 0.4, 0.6, 0.8, 1.0 }; //Tempo igual para todas as partes #macro interpola(tt, t1, t2, v1, v2) ((t2-tt)*v1 + (tt-t1)*v2) / (t2-t1) #end #macro Animacao(tempo) #local i=0; #while ( i < NQ ) #if ( TransformTime[i]<=tempo ) #local ii=i; #end #local i=i+1; #end #local transf1 = Transform[ii]; #local transf2 = Transform[ii+1]; #local tempo1 = TransformTime[ii]; #local tempo2 = TransformTime[ii+1]; #local transf = array[14]; #local j=0; #while (j<13) #local transf[j] = interpola(tempo, tempo1, tempo2, transf1[j], transf2[j]); #local j=j+1; #end corpoA(transf) #end Animacao( clock ) // #declare i = 0; // #while(i < NQ-1) // #declare j = 0; // #while(j <= NQ) // union { // Animacao( (i+(j/NQ)) /NQ ) // translate <-50+10*j, 0, -16 + 8*i> // } // #declare j = j+1; // #end // #declare i = i+1; // #end #include "camlight.inc" #declare centro_cena = <0,0,0>; #declare raio_cena = 10; #declare dir_camera = < -0, -1, 0 >; #declare dist_camera = 50.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)