// ====================================================================== // LABORATÓRIO 06 - COMPUTAÇÃO GRÁFICA // O LONGO BRAÇO DA LEI // RAFAEL LAMARE SILVEIRA 009669 // DESCRIÇÃO: ESTUDO DE ARTICUÇÕES. DEDOS ARTICULADOS ÀS MÃOS; // MÃO ARTICULADA AO ANTEBRACO; ANTREBRAÇO ARTICULADO AO BRAÇO, // CUJO BÍCEPS VARIA DE VOLUME QUANDO CONTRAI-SE O ANTEBRAÇO; // ANTEBRAÇO ARTICULADO AO OMBRO QUE O FAZ GIRAR. // ====================================================================== #include "colors.inc" #declare semente = seed(4345); // Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2003-09-04 15:25:26 by stolfi // ====================================================================== // CÂMERA camera { location < 50.00, 50.00, 50.00 > // Posição do observador. right -1.0*x // Largura RELATIVA da imagem. up 0.75*y // Altura RELATIVA da imagem. sky -z // Qual direção é "para cima"? look_at < 10, 0, -5 > // Para onde a câmera está apontando. } // Nota: os parâmetros "right" e "up" devem ter a mesma proporção // que os parâmetros ${WIDTH} e ${HEIGHT} no Makefile. // ====================================================================== // FONTES DE LUZ light_source { 10 * < +50.0, +30.0, +50.0 > // Posição da lâmpada. color rgb 1.2 * < 1.00, 1.00, 1.00 > // Intensidade e corda luz. } light_source { 10 * < +50.0, -10.0, +10.0 > // Posição da lâmpada. color rgb 0.8 * < 1.00, 1.00, 1.00 > // Intensidade e corda luz. } // ====================================================================== // DESCRIÇÃO DA CENA background{ color rgb < 0.75, 0.80, 0.85 > } //=========================================================================== // VARIÁVEIS DE CONTROLE // Variáveis das articulações #declare beta1 = 45; // antebraco #declare tau1 = 0; // dedos #declare phi1 = 10; // giro do braco #declare phi2 = -10; // giro do braço em z // Divindindo a cena em intervalos #if (clock < 0.25) // desdobra os antebraços #declare beta1 = beta1 - (clock/0.25)*45; #else #if (clock < 0.5) // fecha os braços #declare phi1 = phi1 - ((clock-0.25)/0.25)*20; #else #if (clock < 0.65) //fecha os dedos #declare tau1 = tau1 + ((clock-0.50)/0.25)*45; #else //levanta os braços #declare phi2 = phi2 + ((clock-0.65)/0.35)*40; #declare tau1 = tau1 + 45; #end #declare phi1 = phi1 - 20; #end // Mais um movimento para o antebraço: // quando vai erguer o objeto. #if (clock < 0.65) #declare beta1 = beta1 - 45; #else #declare beta1 = beta1 - 45 + ((clock-0.65)/0.35)*30; #end #end #declare biceps = 2.5 + (beta1/45)*1.5; // ====================================================================== // OBJETOS #declare dedos = union { #declare i = 1; #while (i < 5) object { cylinder { <0,0,0>, <5.5,0,0>, 0.5 rotate <0, tau1 + i*20, 20*i - 40> pigment { Green } } } #declare i = i + 1; #end } #declare mao = union { cylinder { <0,0,0>, <0,0,1>, 2 pigment { Yellow } } object { dedos translate <1.0,0,0> } } #declare anteBraco = union { cone { <0,0,0>, 2.0, <12,0,0>, 1.5 pigment { Red } } sphere { <1,0,0>, 2.0 pigment { Red } } sphere { <12,0,0>, 1.5 pigment { Yellow } } object { mao //rotate <0,alfa,0> translate <12,0,0> } } #declare braco = object { union { sphere { <0,0,0>, 2.8 pigment { Yellow } } union { cone { <0,0,0>, 1.5, <7,0,0>, biceps pigment { Brown } } cone { <7,0,0>, biceps, <14,0,0>, 1.5 pigment { Brown } } } object { anteBraco rotate <0,beta1,0> translate <14,0,0> } } rotate <0,phi2,phi1> } #declare dois_bracos = union { object { braco } object { braco translate <0,15,0> scale <0,-1,0> } } #declare corpo = union { cone { <0,0,0>, 10, <0,0,40>, 15 pigment { Brown } } sphere { <0,0,-18>, 8 pigment { Yellow } } object { dois_bracos translate <7,6,6> } } #declare objeto = object { cylinder { <31,0,-10>, <31,0,10>, 2 pigment { Blue } } rotate <0,phi2,0> } union { object { corpo translate <0,0,-5> } objeto }