// Felipe Marinho Tavares // R.A.: 265680 // Unicamp - MC937A/MO603A – Computação Gráfica - 2020-S2 - Jorge Stolfi // Last edited on 2020-12-08 11:08:02 by jstolfi #version 3.6; // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare brown_soft_149_111_82 = color rgb < 149/255, 111/255, 82/255 >; #declare tx_woodish = texture{ pigment{ brown_soft_149_111_82 } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_redish = texture{ pigment{ color rgb < 255/255, 0/255, 0/255 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_gray70 = texture{ pigment{ color rgb <179/255, 179/255, 179/255> } } #declare tx_gray85 = texture{ pigment{ color rgb <217/255, 217/255, 217/255> } } #declare tx_gray90 = texture{ pigment{ color rgb <230/255, 230/255, 230/255> } } // ====================================================================== // DESCRI��O DA CENA #macro interpola1(tt, tt0, tt1, vv0, vv1) #local rr = (tt - tt0) / (tt1 - tt0); #local vv = (1 - rr) * vv0 + rr * vv1; vv #end #macro robo_vet(params_arr) robot(//right arm params params_arr[0], params_arr[1], params_arr[2], params_arr[3], params_arr[4], params_arr[5], params_arr[6], params_arr[7], params_arr[8], //left arm params params_arr[9], params_arr[10], params_arr[11], params_arr[12], params_arr[13], params_arr[14], params_arr[15], params_arr[16], params_arr[17]) #end #macro robo_mov(tt) #local pp0 = array[18]; //right arm params #local pp0[0] = 50; #local pp0[1] = -25; #local pp0[2] = 80; //upperarm #local pp0[3] = 60; //lowerarm #local pp0[4] = 0; #local pp0[5] = 0; //hand #local pp0[6] = 88; #local pp0[7] = 80; #local pp0[8] = 80; //fingers //left arm params #local pp0[9] = -5; #local pp0[10] = 5; #local pp0[11] = 70; //upperarm #local pp0[12] = 90; //lowerarm #local pp0[13] = 0; #local pp0[14] = 0; //hand #local pp0[15] = 88; #local pp0[16] = 80; #local pp0[17] = 80; //fingers #local pp1 = array[18]; //right arm params #local pp1[0] = 50; #local pp1[1] = 20; #local pp1[2] = 10; //upperarm #local pp1[3] = 110; //lowerarm #local pp1[4] = 0; #local pp1[5] = 0; //hand #local pp1[6] = 88; #local pp1[7] = 80; #local pp1[8] = 80; //fingers //left arm params #local pp1[9] = -5; #local pp1[10] = 5; #local pp1[11] = 70; //upperarm #local pp1[12] = 90; //lowerarm #local pp1[13] = 0; #local pp1[14] = 0; //hand #local pp1[15] = 88; #local pp1[16] = 80; #local pp1[17] = 80; //fingers #local pp = array[18]; #local iter = 0; #while(iter < 18) #local pp[iter] = interpola1(tt, 0, 1, pp0[iter], pp1[iter]); #local iter = iter + 1; #end robo_vet(pp) #end #macro robot(//right arm params ruarm_xtheta, ruarm_ytheta, ruarm_ztheta, rlarm_ytheta, rhand_xtheta, rhand_ytheta, rfinger1_theta, rfinger2_theta, rfinger3_theta, //left arm params luarm_xtheta, luarm_ytheta, luarm_ztheta, llarm_ytheta, lhand_xtheta, lhand_ytheta, lfinger1_theta, lfinger2_theta, lfinger3_theta) union{ cylinder{<0, 0, 0>, <0, 0, 10>, 5 texture{tx_gray85} } sphere{<0, 0, 10>, 5 texture { tx_gray85 } } sphere{<1.4, 0, 12>, 4 texture { tx_gray90 } } // right arm object{ upper_arm(rlarm_ytheta, rhand_xtheta, rhand_ytheta, rfinger1_theta, rfinger2_theta, rfinger3_theta) scale <0.45, 0.45, 0.45> rotate -90*y //default rotate 90*x //default rotate ruarm_xtheta*x rotate ruarm_ytheta*y rotate ruarm_ztheta*z translate <0, -5, 10> } // left arm object{ upper_arm(llarm_ytheta, lhand_xtheta, lhand_ytheta, lfinger1_theta, lfinger2_theta, lfinger3_theta) scale <0.45, 0.45, 0.45> rotate -90*y //default rotate 90*x //default rotate luarm_xtheta*x rotate luarm_ytheta*y rotate luarm_ztheta*z translate <0, -5, 10> scale <1, -1, 1> } } #end #macro upper_arm(larm_ytheta, hand_xtheta, hand_ytheta, finger1_theta, finger2_theta, finger3_theta) union{ box{<0, -2, -1.95>, <12, 2, 1.95> texture{tx_gray85}} object{ lower_arm(hand_xtheta, hand_ytheta, finger1_theta, finger2_theta, finger3_theta) rotate larm_ytheta*y translate <12, 0, 0> } } #end #macro lower_arm(hand_xtheta, hand_ytheta, finger1_theta, finger2_theta, finger3_theta) union{ box{<0, -0.55, -0.55>, <15, 0.55, 0.55> texture{tx_gray85}} object{ hand(finger1_theta, finger2_theta, finger3_theta) rotate hand_xtheta*x rotate hand_ytheta*y translate < 15, 0, 0 > } } #end #macro hand(finger1_theta, finger2_theta, finger3_theta) union{ box{<0, -1.5, -1>, <4, 1.5, 1> texture {tx_gray85}} box{<2, -2.5, -1>, <6, 2.5, 1> texture {tx_gray90}} object{ finger() //finger1 rotate -90*z //default rotate finger1_theta*x translate < 2 + 0.18, -2.5, 0> //default } object{ finger() //finger2 rotate finger2_theta*y translate < 6, -2.5 + 0.18, 0> //default } object{ finger() //finger3 rotate finger3_theta*y translate < 6, 2.5 - 0.18, 0> //default } } #end #macro finger() union{ box{<0, -0.18, -0.25>, <4.5, 0.18, 0.25> texture {tx_gray70}} } #end #include "eixos.inc" // Aqui est� a cena, finalmente: union{ object{ eixos(20.00) translate <0, 0, 0> } #local kk = 0; #local nn = 12; #while (kk < nn) #local tt = kk/nn; #local ang = (0.8*tt + 0.6)*pi; object {robo_mov(tt) rotate -30*z translate 80 * < cos(ang), sin(ang), 0 > } #local kk = kk+1; #end } #include "camlight.inc" #declare centro_cena = < -40.00, 0, 10.00 >; #declare raio_cena = 90.0; #declare dir_camera = < 25.00, -3.00, 12.00 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)