// Trabalho de MC930 - 08/05/03 // Last edited on 2003-05-29 23:06:55 by stolfi // Continuação de "O Primeiro Passo" // Amandio Pereira de Sena Júnior - RA 007998 #include "colors.inc" #declare tempo = 2*clock; // estas variáveis são usadas para estudo do movimento // quando iguais a zero, a animação ocorre de verdade #declare parado = 0; #declare mostrar_eixos = 0; #declare camera_simples = 0; // 0=movimento normal; // 1=parada em perspectiva; // 2=parada com perfil do tornozelo; // 3=parada em perfil; background{ color rgb < 0.00, 0.03, 0.15 > } // light_source { // < 0, 10.00, -20.00 > // color rgb < 1.00, 1.00, 1.00 > // } // light_source { // < 10, 10.00, -15.00 > // color rgb < 1.00, 1.00, 1.00 > // } light_source { 5*< -10, 12.00, -15.00 > color rgb 1.2*< 1.00, 1.00, 1.00 > } light_source { 5*< -30, 3.00, -5.00 > color rgb 0.8*< 1.00, 1.00, 1.00 > } light_source { 5*< -10, 4.00, -15.00 > color rgb 1.2*< 1.00, 1.00, 1.00 > } #switch (camera_simples) //perfil #case (3) camera { location <-20, -5, 0> right x up y sky y look_at <0, -1.5, 0> } #break #case (2) //perfil do peh camera { location <-8, -8, 0> right x up y sky y look_at <0, -8, 0> } #break #case (1) //camera parada camera { location <-20, 1, -10> right x up y sky y look_at <0, -1.5, 0> } #break #else //camera se movimentando camera { location <-20, 1, -10> right x up y sky y look_at <0, -1.5, -tempo*5> } #end #declare tinta_A = texture { pigment { color rgb < 0.10, 0.80, 1.00 > } finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 } } #declare tinta_B = texture { pigment { color rgb < 1.00, 0.80, 0.10 > } finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 } } #declare tinta_C = //marrom texture { pigment { color rgb < 1, 0.70, 0.40 > } finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 } } #declare tinta_D = //vermelho texture { pigment { color rgb < 1.00, 0.10, 0.10 > } finish { diffuse 0.5 specular 0.5 roughness 0.005 ambient 0.1 } } #declare plano = plane { <0, 1, 0>, 0 pigment { checker color <0.9, 0.7, 0.7>, color <0.5, 0.5, 0.9> } } #declare eixos = union { cylinder { <0,0,0>, <0,50,0>, .1 texture { tinta_A } } cylinder { <0,0,50>, <0,0,-50>, .1 texture { tinta_A } } cylinder { <0,5,50>, <0,5,-50>, .1 texture { tinta_A } } } // AQUI COMEÇA O QUE INTERESSA //corpo consiste de caixa simples centrada na origem - ainda deve ser transladada para cima #declare corpo = box { <-1.2,-3,1>, // Near lower left corner <1.2,3,-1> // Far upper right corner texture { tinta_A } translate y*3.5 } #declare cintura = union { cylinder { <-1.5,0,0>, <1.5,0,0>, .4 texture { tinta_A } } } #declare l1=5;//comprimento da coxa #declare l2=5;//comprimento da canela #declare Hmax=9.3;//altura da cintura ao plano //coxa direita com o ponto 0,0,0 na origem do cilindro. //dessa forma as rotacoes da coxa sao triviais //ela eh declarada na rotacao inicial (macaco parado) #declare coxad = union { cylinder { <0,0,0>, <0,-4,-3>, .4 texture { tinta_A } } } //analogo a coxad #declare canelad = union { cylinder { <0,0,0>, <0,-4,3>, .3 texture { tinta_B } } } #declare ped = union { box { <-.6,-.2,0.4>, // Near lower left corner <.6,.2,-1.6> // Far upper right corner texture { tinta_A } rotate x*180*sin(90*tempo)/(pi*5) rotate x*-15 } } #declare pernad0 = union { object { canelad } object { ped translate <0,-4,3> } #declare tetapernad0 = 60*abs(sin(tempo*3.14159)); rotate x*tetapernad0 } #declare pernad = union { object { coxad } object { pernad0 translate <0,-4,-3> } #declare tetapernad = 30*sin(tempo*3.14159); rotate x*tetapernad } #declare coxae = union { cylinder { <0,0,0>, <0,-4,-3>, .4 texture { tinta_A } } } //analogo a coxae #declare canelae = union { cylinder { <0,0,0>, <0,-4,3>, .3 texture { tinta_B } } } #declare pee = union { box { <-.6,-.2,0.4>, // Near lower left corner <.6,.2,-1.6> // Far upper right corner texture { tinta_A } rotate x*180*cos(90*tempo)/(pi*5) rotate x*-15 } } #declare pernae0 = union { object { canelad } object { pee translate <0,-4,3> } #declare tetapernae0 = 60*abs(cos(tempo*3.14159)); rotate x*tetapernae0 } #declare pernae = union { object { coxae } object { pernae0 translate <0,-4,-3> } #declare tetapernae = 30*cos(tempo*3.14159); rotate x*tetapernae } #declare macaco = union { object { corpo } object { cintura } object { pernad translate x*-2} object { pernae translate x*2} #if (parado = 0) translate z*(-tempo*5) #end #declare H = (l1*cos((tetapernad+60)*pi/180) + l2*sin((tetapernad0+30)*pi/180)); #if (H>Hmax) translate (H-Hmax+.3)*y #end #declare H = (l1*cos((tetapernae+60)*pi/180) + l2*sin((tetapernae0+30)*pi/180)); #if (H>Hmax) translate (H-Hmax+.3)*y #end } union { object { macaco } object { plano translate -10*y} #if (mostrar_eixos = 1) object { eixos } #end }