// Last edited on 2011-09-12 03:30:40 by stolfilocal // Generic frame of a simple movie background{ color rgb < 0.75, 0.80, 0.85 > } #include "textures.inc" #include "bzpatch.inc" #include "bztube.inc" #include "bzbody.inc" #include "slave.inc" #include "slave_walking.inc" #macro sample_hand() // One left hand at arbitrary position. object{ slave_left_hand() texture{ tx_white } } #declare cam_rad = 0.75*slave_hand_len; #declare cam_ctr = < 0, 0, -0.5*slave_hand_len >; #declare cam_dir = <2,-10,2>; #end #macro sample_subarm() // One left subarm at arbitrary position. object{ slave_left_subarm(25) texture{ tx_white } } #local t_len = slave_forearm_len + slave_hand_len; #declare cam_rad = 0.75*t_len; #declare cam_ctr = < 0, 0, -0.5*t_len >; #declare cam_dir = <2,-10,2>; #end #macro sample_arm() // One left arm at arbitrary position. #local elb_A = 90; #local elb_B = 90; #local wrs_A = 15; object{ slave_left_arm(elb_A,elb_B,wrs_A) texture{ tx_white } } #declare cam_rad = 1.8*max(slave_uparm_len, slave_forearm_len + slave_hand_len); #declare cam_ctr = < 0, 0, -slave_uparm_len >; #declare cam_dir = <2,-10,2>; #end // object{ slave_left_foot(false) texture{ tx_white } } // #declare cam_rad = 300; // #declare cam_ctr = < 0, 0, 0 >; // object{ slave_left_subleg(false,+25) texture{ tx_white } } // #declare cam_rad = 500; // #declare cam_ctr = < 0, 0, -250 >; #macro sample_leg() // One left leg at arbitrary position. object{ slave_left_leg(false,+30,+25,10) texture{ tx_white } } #declare cam_rad = 800; #declare cam_ctr = < 0, 0, -400 >; #declare cam_dir = <2,-10,2>; #end #macro sample_slave() // One complete slave at arbitrary pose. #local arm_LA = array[6]; #local arm_LA[0] = 20; // Shoulder A (axial upper arm twist). #local arm_LA[1] = 30; // Shoulder B (forward swing). #local arm_LA[2] = 0; // Shoulder C (opening swing). #local arm_LA[3] = 0; // Elbow A (axial forearm twist). #local arm_LA[4] = 90; // Elbow B (forward bend). #local arm_LA[5] = 10; // Wrist A (inward bend). #local arm_RA = array[6]; #local arm_RA[0] = 0; // shoulder A (axial upper arm twist). #local arm_RA[1] = 0; // Shoulder B (forward swing). #local arm_RA[2] = 30; // Shoulder C (opening swing). #local arm_RA[3] = 0; // Elbow A (axial forearm twist). #local arm_RA[4] = 0; // Elbow B (forward bend). #local arm_RA[5] = -30; // Wrist A (inward bend). #local leg_LA = array[6]; #local leg_LA[0] = 0; // Hip A (axial thigh twist). #local leg_LA[1] = 50; // Hip B (forward swing). #local leg_LA[2] = 0; // Hip C (opening swing). #local leg_LA[3] = 30; // Knee A (backward bend). #local leg_LA[4] = 0; // Ankle A (downward pitch angle). #local leg_LA[5] = 0; // Ankle B (inward yaw). #local leg_RA = array[6]; #local leg_RA[0] = 0; // Hip A (axial thigh twist). #local leg_RA[1] = -5; // Hip B (forward swing). #local leg_RA[2] = 0; // Hip C (opening swing). #local leg_RA[3] = 20; // Knee A (backward bend). #local leg_RA[4] = -25; // Ankle A (downward pitch angle). #local leg_RA[5] = 0; // Ankle B (inward yaw). #local blink = 0; #local gape = 0; #local gaze_e = 0; #local gaze_a = 0; object{ slave(arm_LA,arm_RA,leg_LA,leg_RA,blink,gape,gaze_e,gaze_a,tx_white) } #declare cam_rad = 1200; #declare cam_ctr = < 0, 0, 0 >; #declare cam_dir = <2,-10,2>; #end #macro sample_slave_walking(walk,wphase) // A walking slave at phase {wphase} in a walking cycle of amplitude {walk}. #local blink = 0; #local gape = 0; #local gaze_e = 0; #local gaze_a = 0; object{ slave_walking(walk,wphase,blink,gape,gaze_e,gaze_a,tx_white) } #declare cam_rad = 750; #declare cam_ctr = < 0, 0, 0 >; #declare cam_dir = <2,-10,2>; #end // Row of legs through one walking cycle. // #local NL = 10; // #local i = 0; // #while (i < NL) // #local wphase = i/NL; // object{ slave_walking_leg(false,1.0,+1,wphase) translate 500*i*y texture{ tx_white } } // object{ slave_walking_leg(false,1.0,-1,wphase) translate 500*i*y texture{ tx_white } } // #local i = i + 1; // #end // #declare cam_rad = 3000; // #declare cam_ctr = < 0, 2500, -400 >; // #declare cam_dir = <2,-10,2>; #macro row_of_slaves(NL) // Row of slaves through one walking cycle. #local walk = 1.0; union{ #local i = 0; #while (i < NL) #local wphase = i/NL; #local yfig = 800*i; union{ object{ slave_walking(walk,wphase, 0,0,0,0,tx_white) texture{ tx_white } } text{ ttf "arial.ttf" str(wphase,5,3) 0.002, 0 texture{ tx_rod } scale 150 rotate 90*x translate 1200*z } #local rp = slave_walking_support_rel_pos(walk,wphase); cone{ -400*z, 100, 0, 0 texture{ tx_hole } translate rp } translate yfig*y } #local i = i + 1; #end } #declare cam_rad = 4000; #declare cam_ctr = < 0, 5000, -400 >; #declare cam_dir = <2,-10,2>; #end #macro walk_of_slave(NC,NL) // Row of slaves through {NC} walking cycles. #local walk = 1.0; #local footprints_ht = 5; #local footprints = slave_walking_multiple_footprints(walk,NC,footprints_ht) union{ #local i = 0; #while (i < NL) #local wphase = NC*i/NL; #local yfig = 800*i; union{ object{ slave_walking_multiple(walk,NC,wphase, 0,0,0,0,tx_white) texture{ tx_white } } object{ footprints } text{ ttf "arial.ttf" str(wphase,5,3) 0.002, 0 texture{ tx_rod } scale 150 rotate 90*x translate 1800*z } translate yfig*y } #local i = i + 1; #end plane{ z,0 texture{ tx_chess scale 200 } translate -footprints_ht*z } } #declare cam_rad = 4000; #declare cam_ctr = < 0, 5000, -400 >; #declare cam_dir = <2,-10,2>; #end #macro bztube_ring_cap_fork_test_set_cpoints(Ta,Ba,Tb,Bb, ymin,ymax) #local y0 = (2*ymin + ymax)/3; #local y1 = (ymin + 2*ymax)/3; #declare Ta[0][0] = < -3.00, y0, +1.00 >; #declare Ta[0][1] = < -3.00, y1, +1.00 >; #declare Ta[1][0] = < -1.00, y0, +1.00 >; #declare Ta[1][1] = < -1.00, y1, +1.00 >; #declare Tb[0][0] = < +1.00, y0, +0.75 >; #declare Tb[0][1] = < +1.00, y1, +0.75 >; #declare Tb[1][0] = < +2.00, y0, +0.75 >; #declare Tb[1][1] = < +2.00, y1, +0.75 >; #declare Ba[0][0] = < -3.00, y0, -1.00 >; #declare Ba[0][1] = < -3.00, y1, -1.00 >; #declare Ba[1][0] = < -1.00, y0, -1.00 >; #declare Ba[1][1] = < -1.00, y1, -1.00 >; #declare Bb[0][0] = < +1.00, y0, -0.75 >; #declare Bb[0][1] = < +1.00, y1, -0.75 >; #declare Bb[1][0] = < +2.00, y0, -0.75 >; #declare Bb[1][1] = < +2.00, y1, -0.75 >; #end #macro bztube_ring_cap_fork_test() // Segment 0 (4-patch ring): #local Ta0 = array[2][2]; #local Tb0 = array[2][2]; #local Ba0 = array[2][2]; #local Bb0 = array[2][2]; bztube_ring_cap_fork_test_set_cpoints(Ta0,Ba0,Tb0,Bb0, -3.00, 00.00) // Segment 1 (4-patch ring): #local Ta1 = array[2][2]; #local Tb1 = array[2][2]; #local Ba1 = array[2][2]; #local Bb1 = array[2][2]; bztube_ring_cap_fork_test_set_cpoints(Ta1,Ba1,Tb1,Bb1, 00.00, +3.00) // Segment 2 (pre-fork): #local Ta2 = array[2][2]; #local Tb2 = array[2][2]; #local Ba2 = array[2][2]; #local Bb2 = array[2][2]; bztube_ring_cap_fork_test_set_cpoints(Ta2,Ba2,Tb2,Bb2, +3.00, +6.00) // Segment 3 (pos-fork): #local Ta3 = array[2][2]; #local Tb3 = array[2][2]; #local Ba3 = array[2][2]; #local Bb3 = array[2][2]; bztube_ring_cap_fork_test_set_cpoints(Ta3,Ba3,Tb3,Bb3, +6.00, +9.00) // Segment 4 (pair of 2-patch rings): #local Ta4 = array[2][2]; #local Tb4 = array[2][2]; #local Ba4 = array[2][2]; #local Bb4 = array[2][2]; bztube_ring_cap_fork_test_set_cpoints(Ta4,Ba4,Tb4,Bb4, +9.00, +12.00) // Segment 5 (pair of 2-patch caps): #local Ta5 = array[2][2]; #local Tb5 = array[2][2]; #local Ba5 = array[2][2]; #local Bb5 = array[2][2]; bztube_ring_cap_fork_test_set_cpoints(Ta5,Ba5,Tb5,Bb5, +12.00, +15.00) union{ object{ bztube_ring4(Ta0,Ba0,Tb0,Bb0, Ta1,Ba1,Tb1,Bb1, Ta2,Ba2,Tb2,Bb2, tx_white, tx_ivory, 0.015, tx_blue) } object{ bztube_prefork42(Ta1,Ba1,Tb1,Bb1, Ta2,Ba2,Tb2,Bb2, Ta3,Ba3,Tb3,Bb3, tx_white, tx_ivory, 0.015, tx_blue) } object{ bztube_posfork42(Ta2,Ba2,Tb2,Bb2, Ta3,Ba3,Tb3,Bb3, Ta4,Ba4,Tb4,Bb4, tx_white, tx_ivory, 0.015, tx_blue) } object{ bztube_ring2(Ta3,Ba3, Ta4,Ba4, Ta5,Ba5, tx_white, tx_ivory, 0.015, tx_blue) } object{ bztube_ring2(Tb3,Bb3, Tb4,Bb4, Tb5,Bb5, tx_white, tx_ivory, 0.015, tx_blue) } object{ bztube_cap2(Ta4,Ba4, Ta5,Ba5, tx_white, tx_ivory, 0.015, tx_blue) } object{ bztube_cap2(Tb4,Bb4, Tb5,Bb5, tx_white, tx_ivory, 0.015, tx_blue) } } #declare cam_rad = 8.00; #declare cam_ctr = < 00.00, +7.00, 00.00 >; #declare cam_dir = <10,7,2>; #end #macro bzbody_foot_test() #local ra = 40; #local fs = 100; #local fw = 130; #local fh = 50; #local ax = 0; #local ay = 0; #local bt = 0; #local Ta0 = array[2][2]; #local Ba0 = array[2][2]; #local Tb0 = array[2][2]; #local Bb0 = array[2][2]; bzbody_ankle_set_cpoints(Ta0,Ba0,Tb0,Bb0,ra,fh,ax,ay) object{ bzbody_foot(Ta0,Ba0,Tb0,Bb0,ra,fs,fw,fh,bt) } #declare cam_rad = 1.5*fs; #declare cam_ctr = < fs/2, 00.00, ra/2 >; #declare cam_dir = <3,10,2>; #end // object{ row_of_slaves(20) } // object{ walk_of_slave(3,72) } // object{ sample_hand() } // object{ sample_subarm() } // object{ sample_arm() } // object{ sample_leg() } // object{ sample_slave() } // object{ sample_slave_walking(1.0,0.0) } // object{ bztube_ring_cap_fork_test() } object{ bzbody_foot_test() } object{ axes(0.75*cam_rad) }