/************************************************* * *** MC930 - COMPUTAÇÃO GRÁFICA *** * * Laboratório 6: O longo braço da lei * Este projeto consiste em definir e animar o longo * braço da lei, sempre pronta para agir. * * Autor: Volnei dos Santos (RA 010075) * 09/Nov/2004 ************************************************/ // ====================================================================== // CÂMERA camera { location <2, -10, 2> right -1.50*x up 1.00*y sky z look_at <4, 0, 0> } // ====================================================================== // FONTES DE LUZ light_source { < 0, -15, 2> color rgb 10*<1.0 ,1.0 ,1.0> } // ====================================================================== // PARÂMETROS DO MOVIMENTO // Variáveis de tamanho dos membros #declare larMembro = 0.15; // Variáveis de controle de movimento #declare angMoeda = (clock*6)*360; #if(clock < 0.5) #declare posMoeda = 12 - (clock*2)*6; #declare alphad = ((0.5 - clock)*2)*-30; #declare alphap = ((0.5 - clock)*2)*30; #declare alpham = ((0.5 - clock)*2)*45; #declare alphaa = ((0.5 - clock)*2)*-90; #declare alphab = ((0.5 - clock)*2)*45; #declare angulb = -45; #else #declare posMoeda = 18 - 6*(2*(clock - 0.5)); #declare alphad = ((-0.5 + clock)*2)*-30; #declare alphap = ((-0.5 + clock)*2)*30; #declare alpham = ((-0.5 + clock)*2)*45; #declare alphaa = ((-0.5 + clock)*2)*-90; #declare alphab = ((-0.5 + clock)*2)*45; #declare angulb = -45; #end // ====================================================================== // DESCRIÇÃO DA CENA // Textura de ouro #declare ouro = texture { pigment { rgb < 1.00, 1.00, 0.60> } finish { ambient 0.05 diffuse 0.05 reflection < 1.00, 1.00, 0.60> specular 0.2 roughness 0.05 } } // Textura da pele da lei #declare pele = texture { pigment { rgb < 0.90, 0.90, 0.90> } finish { diffuse 0.05 } } // O "criminoso" #declare moeda = object { union { cylinder { <0, 0, -0.05>, <0, 0, 0.05>, 0.15 } } texture { ouro } } // Corpo da lei (sem braço) #declare lei = object { union { cylinder { <0, 0, 0.5>, <0, 0, -2>, 1.0 } cylinder { <0, 0, 0.5>, <0, 0, 1.0>, larMembro } sphere { <0, 0, 2.0>, 1.0 } torus { 0.9, 0.2 rotate 90*x translate z*2.3 texture { pigment {rgb 0} } } } texture { pele } } // Dedo da mão (constituirá a mão) #declare dedo = object { union { cylinder { <0, 0, 0>, <1.5, 0, 0>, 0.1 } sphere { <1.5, 0, 0>, 0.1 } } texture { pele } } // 4 Dedos da mão (sem polegar). Os mesmos articulam girando no plano xz. #declare dedos = object { union { object {dedo rotate 15*z} object {dedo rotate -15*z} object {dedo rotate 30*z} object {dedo rotate -30*z} } rotate alphad*y } // Polegar da mão. O mesmo articula girando no plano xz. #declare polegar = object { union { object {dedo} } rotate alphap*y } // A mão da lei. A mesma articula girando no plano xz. #declare mao = object { union { sphere { <0, 0, 0>, 0.25 texture { pele } } object {dedos} object {polegar} } rotate alpham*y } // O antebraço da lei. O mesmo articula girando no plano xz. #declare antebraco = object { union { sphere { <0, 0, 0>, 0.25 texture { pele } } cylinder { <0, 0, 0>, <2.0, 0, 0>, larMembro texture { pele } } object {mao translate 2.0*x} } rotate alphaa*y } // O braço da lei. O mesmo articula girando no plano xz e também no eixo // x (esse último movimento foi um incremento ao especificado) #declare braco = object { union { sphere { <0, 0, 0>, 0.25 texture { pele } } cylinder { <0, 0, 0>, <2, 0, 0>, larMembro texture { pele } } object {antebraco translate 2*x} } rotate angulb*x rotate alphab*y } // ====================================================================== // Desenho da cena, utilizando as figuras definidas // Fundo da cena background{ color rgb <0.75, 0.80, 1.0> } // Objetos union { object { lei } object { braco translate 1*x } // Um braço extra, espelhado ao normal. Incremento ao especificado. object { braco translate 1*x scale -1*x} // A moeda gira no eixo x. Incremento ao especificado. object { moeda rotate angMoeda*x translate posMoeda*x } }