// Ivan Francisco Coutinho Costa // Last edited on 2003-05-29 18:56:02 by stolfi // RA 001833 // MC930 - TP 7 - Macaco Mecanico Andante // Data 24/04/2003 #include "colors.inc" #include "textures.inc" #include "metals.inc" background { color rgb <0.3, 0.7, 0.8> } #declare andar_z = clock * -32; #declare olhar_z = andar_z; #declare ctr = <0,5,-15>; camera { location ctr + 1.3 * <40,-5,-5> right x up y look_at ctr } light_source { 100*<15, 5, 22> color 0.8*White } light_source { 100*<-10, 20, -50> color 1.2*White } light_source { 100*<10, 20, 10> color Pink } plane { y, -10.0 texture { White_Wood scale 5 } } #declare tronco = union { sphere { <0, 10, 0> 2.0 } sphere { <0, 0, 0> 2.0 } cylinder { <0,0,0>, <0,10,0>,2 } pigment { Brown } } #declare orelha = difference { sphere { <0, 0, 0>, 1.5 } sphere { <0, 0, .8>, 2.0 } pigment {Flesh} } #declare rabo= union { cylinder {<0,0,0>, <10,0,0>, 0.4 pigment {Brown} } // cilindro deitado no eixo x } #declare olho= sphere { <0,0,0>, .3 pigment { White } } #declare braco = union { sphere { <0,0,0>, 1.0 } cylinder { <0,0,0>, <0,-3, 0>, 1.0} cylinder { <0,-3,0>, < 2, -7, 0>, 0.8} sphere { <0,-3,0>, 1.0 } // a mao union { sphere { <2,-7,0>, 0.8 pigment {Flesh } } } pigment {Brown} } #declare beico= difference { sphere { <0,0,0>, 1.1 } box { <-1.1, 0, -1.1>, <1.1, 1.1, 1.1> } pigment {Flesh} } #declare canela= union { cylinder { <0,0,0>, <0,-5,0>, 1.0 } // canela union { // o pe sphere { <0,-5,0> 1 } cylinder {<0,-5,0>, <0,-5, -1>, 1.0 } sphere { <0,-5,-1>, 1 } pigment {Flesh} } pigment {Brown} } // ---------------- angulos das coxa, canelas, rabo, bracos #declare ang_coxa = 35 * sin (360 * clock); #declare maxclock=1.0; #declare revol=4.0; // numero de iteracoes #declare time = mod(clock, (maxclock/revol)); // tempo #declare j=(maxclock/revol) / 4; #declare n = 1/j; // n*j=1 #declare i1=j*1; #declare i2=j*2; #declare i3=j*3; #declare i4=j*4; #if (time<=i1) #declare ang_canela_esq = -45; // * n* (time); #declare ang_canela_dir = 0; #end #if (time>i1 & time<=i2) #declare ang_canela_esq = 0; #declare ang_canela_dir = -45; // * n * time; #end #if (time>i2 & time<=i3) #declare ang_canela_esq = 0; #declare ang_canela_dir = -45; // * n * (time); #end #if (time>i3 & time<=i4) #declare ang_canela_esq = - 45; // * n * (time); #declare ang_canela_dir = 0; #end #declare ang_rabo = 35 * sin (revol * 360*clock); #declare ang_braco = 50 * sin ( revol/4 * 360*clock); // ------------------------------------------------------- #declare perna_esquerda = union { sphere { <0,0,0>, 1.3 } cylinder { <0,0,0>, <0,-4,0>, 1.3 } // coxa sphere { <0,-4,0>, 1.3 } object { canela rotate translate <0,-4,0>} pigment { Brown } } #declare perna_direita = union { sphere { <0,0,0>, 1.3 } cylinder { <0,0,0>, <0,-4,0>, 1.3 } // coxa sphere { <0,-4,0>, 1.3 } object { canela rotate translate <0,-4,0>} pigment { Brown } } #declare corpo= union { object { tronco } object { orelha rotate <180,0,0> translate <-2.5,10,-1>} // orelha direita object { orelha rotate <180,0,0> scale <-1,1,1> translate <2.5,10,-1> } // orelha esquerda object { olho translate <-1,10,-1.8> } // olho direito object { olho translate <1,10,-1.8> } // olho esquerdo object { beico rotate <-10, 0,0 > translate <0, 8, -2> } // beico inferior object { beico rotate <180,0,0> translate <0, 8, -2> } // beico superior } #declare macaco = union { object { corpo } object { perna_esquerda rotate translate <1.5,0,0> } // perna object { perna_direita rotate <-ang_coxa, 0,0> translate <1.5,0,0> scale <-1,1,1> } // perna object { braco rotate <0,100,0> rotate <0,0,-25> rotate translate <-2, 6, 0> } // braco direito object { braco rotate <0,100,0> rotate <0,0,-25> scale <-1,1,1> rotate <-ang_braco,0,0> translate <2,6,0> } // braco esquerdo object { rabo rotate <0,290,0> rotate <0,0,ang_rabo> } // rabo } // a cena object { macaco translate <0,0,andar_z>}