################################################## # # A spider (optionally on the web). # # Created by: # Alex Gontmakher 30873269 # Samoylov Tatiana 30951817 # # 21/1/96 # # Reference: # Jumping Spiders of North America. (look in WWW) # ################################################# #$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #$$ jaw_seg jaw_arc = cbezier(list( ctlpt(E3, 0, 0.15, 0), ctlpt(E3, -0.1, 0.15, 0), ctlpt(E3, 0.2, 0.2, 0), ctlpt(E3, 0.27, 0.15, 0), ctlpt(E3, 0.4, 0.11, 0), ctlpt(E3, 0.5, -0.05, 0), ctlpt(E3, 0.48, -0.1, 0))); w1 = 5; jaw_scale = cbspline(3, list(ctlpt(e3, 0, 0, 0), ctlpt(e3, 0, 0.28, 0), ctlpt(e3, 0.09, 0.2, 0), ctlpt(p3, w1, 0.12*w1, 0.2*w1, 0*w1), ctlpt(p3, w1, 0.5*w1, 0.2*w1, 0*w1), ctlpt(p3, w1, 0.9*w1, 0.17*w1,0*w1), ctlpt(e3, 1, 0.01, 0), ctlpt(e3, 1, 0.0, 0)), list(KV_OPEN)); jaw_cut = circle(vector(0,0,0),0.4); jaw_seg = swpsclsrf( jaw_cut, jaw_arc, jaw_scale, off, 1 ) * trans(vector(0,-0.18,0)); attrib(jaw_seg, "rgb", "255,255,255"); attrib(jaw_seg, "reflect", 1.0); jaw_seg_m = swpsclsrf( jaw_cut, jaw_arc * scale(vector(-1,1,1)), jaw_scale, off, 1 ) * trans(vector(0,-0.18,0)); attrib(jaw_seg_m, "rgb", "255,255,255"); free(jaw_scale); free(jaw_arc); free(jaw_cut); #$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #$$$ segment 1 of the leg leg_seg1_arc = cbezier(list( ctlpt(E3,0,0,0), ctlpt(E3,-0.1,0,0), ctlpt(E3,0.5,0.2,0), ctlpt(E3,1.1,-0.05,0), ctlpt(E3,1,0,0))); w1 = 5; leg_seg1_scale = cbspline(3, list(ctlpt(e3, 0,0,0), ctlpt(e3, 0,0.08,0), ctlpt(e3, 0.09,0.1,0), ctlpt(p3, w1,0.12*w1,0.2*w1,0*w1), ctlpt(p3, w1,0.5*w1,0.3*w1,0*w1), ctlpt(p3, w1,0.87*w1,0.09*w1,0*w1), ctlpt(e3, 0.9,0.12,0), ctlpt(e3, 1,0.25,0), ctlpt(e3, 1,0.01,0)), list(KV_OPEN)); leg_seg1_cut = circle(vector(0,0,0),0.5); leg_seg1 = swpsclsrf( leg_seg1_cut, leg_seg1_arc, leg_seg1_scale, off, 1 ); attrib(leg_seg1, "rgb", "120,120,120"); leg_seg1_m = swpsclsrf( leg_seg1_cut, leg_seg1_arc * scale(vector(-1,1,1)), leg_seg1_scale, off, 1 ); attrib(leg_seg1_m, "rgb", "120,120,120"); free(leg_seg1_scale); free(leg_seg1_arc); free(leg_seg1_cut); #$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #$$ segment 2 of the leg leg_seg2_arc = cbezier(list( ctlpt(E3, 0, 0, 0), ctlpt(E3, -0.1, 0, 0), ctlpt(E3, 0.5, 0.1, 0), ctlpt(E3, 1.1, -0.05, 0), ctlpt(E3, 1, 0, 0))); w1 = 5; leg_seg2_scale = cbspline(3, list(ctlpt(e3, 0, 0, 0), ctlpt(e3, 0, 0.08, 0), ctlpt(e3, 0.09, 0.1, 0), ctlpt(p3, w1, 0.12*w1, 0.2*w1, 0*w1), ctlpt(p3, w1, 0.5*w1, 0.3*w1, 0*w1), ctlpt(p3, w1, 0.65*w1, 0.17*w1,0*w1), ctlpt(e3, 0.9, 0.12, 0), ctlpt(e3, 1, 0.03, 0), ctlpt(e3, 1, 0.01, 0)), list(KV_OPEN)); leg_seg2_cut = circle(vector(0,0,0),0.5); leg_seg2 = swpsclsrf( leg_seg2_cut, leg_seg2_arc, leg_seg2_scale, off, 1 ); attrib(leg_seg2, "rgb", "100,100,100"); leg_seg2_m = swpsclsrf( leg_seg2_cut, leg_seg2_arc * scale(vector(-1,1,1)), leg_seg2_scale, off, 1 ); attrib(leg_seg2_m, "rgb", "100,100,100"); free(leg_seg2_scale); free(leg_seg2_arc); free(leg_seg2_cut); #$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ #$$ segment 3 of the leg leg_seg3_arc = cbezier(list( ctlpt(E3, 0, 0, 0), ctlpt(E3, -0.1, 0, 0), ctlpt(E3, 0.2, 0.15, 0), ctlpt(E3, 0.22, 0.15, 0), ctlpt(E3, 0.4, 0.03, 0), ctlpt(E3, 1.1, -0.05, 0), ctlpt(E3, 1, 0, 0))); w1 = 5; leg_seg3_scale = cbspline(3, list(ctlpt(e3, 0, 0, 0), ctlpt(e3, 0, 0.28, 0), ctlpt(e3, 0.09, 0.2, 0), ctlpt(p3, w1, 0.12*w1, 0.2*w1, 0*w1), ctlpt(p3, w1, 0.5*w1, 0.2*w1, 0*w1), ctlpt(p3, w1, 0.9*w1, 0.17*w1,0*w1), ctlpt(e3, 0.9, 0.26, 0), ctlpt(e3, 1, 0.23, 0), ctlpt(e3, 1, 0.01, 0)), list(KV_OPEN)); leg_seg3_cut = circle(vector(0,0,0),0.3); leg_seg3 = swpsclsrf( leg_seg3_cut, leg_seg3_arc, leg_seg3_scale, off, 1 ); attrib(leg_seg3, "rgb", "50,50,50"); leg_seg3_m = swpsclsrf( leg_seg3_cut, leg_seg3_arc * scale(vector(-1,1,1)), leg_seg3_scale, off, 1 ); attrib(leg_seg3_m, "rgb", "50,50,50"); free(leg_seg3_scale); free(leg_seg3_arc); free(leg_seg3_cut); ###################################### ### segment 4 leg_seg4_arc = cbezier(list( ctlpt(E3,0,0,0), ctlpt(E3,-0.1,0,0), ctlpt(E3,0.5,-0.05,0), ctlpt(E3,1.1,0.01,0), ctlpt(E3,1,0,0))); w1 = 5; leg_seg4_scale = cbspline(3, list(ctlpt(e3, 0,0,0), ctlpt(e3, 0,0.25,0), ctlpt(e3, 0.09,0.13,0), ctlpt(p3, w1,0.12*w1,0.10*w1,0*w1), ctlpt(p3, w1,0.87*w1,0.09*w1,0*w1), ctlpt(e3, 0.9,0.12,0), ctlpt(e3, 1,0.25,0), ctlpt(e3, 1,0.01,0)), list(KV_OPEN)); leg_seg4_cut = circle(vector(0,0,0),0.40); leg_seg4 = swpsclsrf( leg_seg4_cut, leg_seg4_arc, leg_seg4_scale, off, 1 ); attrib(leg_seg4, "rgb", "120,120,120"); leg_seg4_m = swpsclsrf( leg_seg4_cut, leg_seg4_arc * scale(vector(-1,1,1)), leg_seg4_scale, off, 1 ); attrib(leg_seg4_m, "rgb", "120,120,120"); free(leg_seg4_scale); free(leg_seg4_cut); free(leg_seg4_arc); ###################################### ### segment 5 leg_seg5_arc = cbezier(list( ctlpt(E3,0,0,0), ctlpt(E3,-0.1,0,0), ctlpt(E3,0.5,0.08,0), ctlpt(E3,1.1,-0.02,0), ctlpt(E3,1,0,0))); w1 = 5; leg_seg5_scale = cbspline(3, list(ctlpt(e3, 0,0,0), ctlpt(e3, 0,0.25,0), ctlpt(e3, 0.09,0.13,0), ctlpt(p3, w1,0.12*w1,0.25*w1,0*w1), ctlpt(p3, w1,0.87*w1,0.19*w1,0*w1), ctlpt(e3, 0.9,0.12,0), ctlpt(e3, 1,0.25,0), ctlpt(e3, 1,0.01,0)), list(KV_OPEN)); leg_seg5_cut = circle(vector(0,0,0),0.50); leg_seg5 = swpsclsrf( leg_seg5_cut, leg_seg5_arc, leg_seg5_scale, off, 1 ); attrib(leg_seg5, "rgb", "192,192,192"); leg_seg5_m = swpsclsrf( leg_seg5_cut, leg_seg5_arc * scale(vector(-1,1,1)), leg_seg5_scale, off, 1 ); attrib(leg_seg5_m, "rgb", "192,192,192"); free(leg_seg5_scale); free(leg_seg5_cut); free(leg_seg5_arc); ###################################### ### leg 0 leg0_arc = cbspline(3, list( ctlpt(E3,1,0,0), ctlpt(E3,1.1,-0.02,0), ctlpt(E3,0.6,0.5,0), ctlpt(E3,0.35,0.5,0), ctlpt(E3,-0.1,0,0), ctlpt(E3,0,0,0) ), list(KV_OPEN)); w1 = 5; leg0_scale = cbspline(3, list(ctlpt(e3, 0,0,0), ctlpt(e3, 0,0.43,0), ctlpt(e3, 0.3,0.35,0), ctlpt(p3, w1,0.12*w1,0.25*w1,0*w1), ctlpt(p3, w1,0.87*w1,0.19*w1,0*w1), ctlpt(e3, 0.9,0.12,0), ctlpt(e3, 1,0.25,0), ctlpt(e3, 1,0.01,0)), list(KV_OPEN)); leg0_cut = circle(vector(0,0,0),0.50); leg0_seg = swpsclsrf( leg0_cut, leg0_arc, leg0_scale, off, 1 ); leg0_seg_m = swpsclsrf( leg0_cut, leg0_arc * scale(vector(-1,1,1)), leg0_scale, off, 1 ); leg0 = leg0_seg * scale(vector(0.7,0.7,0.7)) * rotz(-120); leg0_m = leg0_seg_m * scale(vector(0.7,0.7,0.7)) * rotz(120); attrib(leg0, "rgb", "100,100,100"); attrib(leg0_m, "rgb", "100,100,100"); free(leg0_seg_m); free(leg0_seg); free(leg0_scale); free(leg0_arc); free(leg0_cut); ###################################### ### leg 1 leg1_seg1_trans = rotz(-30) * roty(25); leg1_seg1_dv = vector(1,-0.02,0) * leg1_seg1_trans; leg1_seg2_trans = scale(vector(1.5,1,1)) * rotz(-90) * rotx(-10) * trans(leg1_seg1_dv); leg1_seg2_dv = vector(1,0,0) * leg1_seg2_trans; leg1_seg3_trans = rotz(-110) * roty(90) * rotx(-10) * rotz(-20) * trans(vector(-0.02,-0.05,0)) * trans(leg1_seg2_dv); leg1_seg1_trans_m = rotz(30) * roty(-25); leg1_seg1_dv_m = vector(-1,-0.02,0) * leg1_seg1_trans_m; leg1_seg2_trans_m = scale(vector(1.5,1,1)) * rotz(90) * rotx(-10) * trans(leg1_seg1_dv_m); leg1_seg2_dv_m = vector(-1,0,0) * leg1_seg2_trans_m; leg1_seg3_trans_m = rotz(110) * roty(-90) * rotx(-10) * rotz(20) * trans(vector(0.02,0.05,0)) * trans(leg1_seg2_dv_m); leg1 = list(leg_seg1 * leg1_seg1_trans, leg_seg2 * leg1_seg2_trans, leg_seg3 * leg1_seg3_trans, trans(vector(1.15,-0.97,0.03))); leg1_m = list(leg_seg1_m * leg1_seg1_trans_m, leg_seg2_m * leg1_seg2_trans_m, leg_seg3_m * leg1_seg3_trans_m, trans(vector(1.15,0.97,-0.03))); free(leg1_seg3_trans); free(leg1_seg2_trans); free(leg1_seg1_trans); free(leg1_seg2_dv); free(leg1_seg1_dv); free(leg1_seg3_trans_m); free(leg1_seg2_trans_m); free(leg1_seg1_trans_m); free(leg1_seg2_dv_m); free(leg1_seg1_dv_m); ###################################### ### leg 2 leg2_seg1_trans = roty(15); leg2_seg1_dv = vector(1,0,0) * leg2_seg1_trans; leg2_seg2_trans = rotz(-70) * rotx(-10) * trans(leg2_seg1_dv); leg2_seg2_dv = vector(1,0,0) * leg2_seg2_trans; leg2_seg3_trans = rotz(-110) * roty(90) * rotx(-10) * trans(vector(-0.02,0.05,0)) * trans(leg2_seg2_dv); leg2_seg1_trans_m = roty(-15); leg2_seg1_dv_m = vector(-1,0,0) * leg2_seg1_trans_m; leg2_seg2_trans_m = rotz(70) * rotx(-10) * trans(leg2_seg1_dv_m); leg2_seg2_dv_m = vector(-1,0,0) * leg2_seg2_trans_m; leg2_seg3_trans_m = rotz(110) * roty(-90) * rotx(-10) * trans(vector(0.02,-0.05,0)) * trans(leg2_seg2_dv_m); leg2 = list(leg_seg1 * leg2_seg1_trans, leg_seg2 * leg2_seg2_trans, leg_seg3 * leg2_seg3_trans, trans(vector(1.15,-0.97,0.03))); leg2_m = list(leg_seg1_m * leg2_seg1_trans_m, leg_seg2_m * leg2_seg2_trans_m, leg_seg3_m * leg2_seg3_trans_m, trans(vector(1.15,0.97,-0.03))); free(leg2_seg3_trans); free(leg2_seg2_trans); free(leg2_seg1_trans); free(leg2_seg2_dv); free(leg2_seg1_dv); free(leg2_seg3_trans_m); free(leg2_seg2_trans_m); free(leg2_seg1_trans_m); free(leg2_seg2_dv_m); free(leg2_seg1_dv_m); ###################################### ### leg 3 leg3_seg1_trans = rotz(20) * roty(15); leg3_seg1_dv = vector(1,0,0) * leg3_seg1_trans; leg3_seg2_trans = rotx(180) * scale(vector(1.4,1,1)) * rotz(15) * roty(-10) * rotx(-10); leg3_seg2_dv = vector(1,0,0) * leg3_seg2_trans; leg3_seg3_trans = scale(vector(0.8,0.6,1)) * rotx(-90) * rotz(20) * roty(-36) * rotx(-10); leg3_seg1_trans_m = rotz(-20) * roty(-15); leg3_seg1_dv_m = vector(-1,0,0) * leg3_seg1_trans_m; leg3_seg2_trans_m = rotx(180) * scale(vector(1.4,1,1)) * rotz(-15) * roty(10) * rotx(-10); leg3_seg2_dv_m = vector(-1,0,0) * leg3_seg2_trans_m; leg3_seg3_trans_m = scale(vector(0.8,0.6,1)) * rotx(-90) * rotz(-20) * roty(36) * rotx(-10); leg3 = list(leg_seg5 * leg3_seg1_trans, leg_seg4 * leg3_seg2_trans * trans(leg3_seg1_dv), leg_seg3 * leg3_seg3_trans * trans(leg3_seg1_dv) * trans(leg3_seg2_dv)); leg3_m = list(leg_seg5_m * leg3_seg1_trans_m, leg_seg4_m * leg3_seg2_trans_m * trans(leg3_seg1_dv_m), leg_seg3_m * leg3_seg3_trans_m * trans(leg3_seg1_dv_m) * trans(leg3_seg2_dv_m)); free(leg3_seg2_dv); free(leg3_seg1_dv); free(leg3_seg3_trans); free(leg3_seg2_trans); free(leg3_seg1_trans); free(leg3_seg2_dv_m); free(leg3_seg1_dv_m); free(leg3_seg3_trans_m); free(leg3_seg2_trans_m); free(leg3_seg1_trans_m); ###################################### ### leg 4 leg4_seg1_trans = rotz(50) * roty(15); leg4_seg1_dv = vector(1,0,0) * leg4_seg1_trans; leg4_seg2_trans = rotx(180) * scale(vector(1.4,1,1)) * rotz(56) * roty(-10) * rotx(-10); leg4_seg2_dv = vector(1,0,0) * leg4_seg2_trans; leg4_seg3_trans = scale(vector(0.8,0.6,1)) * rotx(-90) * rotz(56) * roty(-36) * rotx(15); leg4_seg1_trans_m = rotz(-50) * roty(-15); leg4_seg1_dv_m = vector(-1,0,0) * leg4_seg1_trans_m; leg4_seg2_trans_m = rotx(180) * scale(vector(1.4,1,1)) * rotz(-56) * roty(10) * rotx(-10); leg4_seg2_dv_m = vector(-1,0,0) * leg4_seg2_trans_m; leg4_seg3_trans_m = scale(vector(0.8,0.6,1)) * rotx(-90) * rotz(-56) * roty(36) * rotx(15); leg4 = list(leg_seg5 * leg4_seg1_trans, leg_seg4 * leg4_seg2_trans * trans(leg4_seg1_dv), leg_seg3 * leg4_seg3_trans * trans(leg4_seg1_dv) * trans(leg4_seg2_dv)); leg4_m = list(leg_seg5_m * leg4_seg1_trans_m, leg_seg4_m * leg4_seg2_trans_m * trans(leg4_seg1_dv_m), leg_seg3_m * leg4_seg3_trans_m * trans(leg4_seg1_dv_m) * trans(leg4_seg2_dv_m)); free(leg4_seg2_dv); free(leg4_seg1_dv); free(leg4_seg3_trans); free(leg4_seg2_trans); free(leg4_seg1_trans); free(leg4_seg2_dv_m); free(leg4_seg1_dv_m); free(leg4_seg3_trans_m); free(leg4_seg2_trans_m); free(leg4_seg1_trans_m); ###################################### ### jaw jaw_seg1_trans = scale(vector(0.5,1.1,1)); jaw_seg1_dv = vector(1,0,0) * jaw_seg1_trans; jaw_seg2_trans = scale(vector(0.3,0.83,0.78)); jaw_seg2_dv = vector(1,0,0) * jaw_seg2_trans; jaw_seg1_trans_m = scale(vector(0.5,1.1,1)); jaw_seg1_dv_m = vector(-1,0,0) * jaw_seg1_trans_m; jaw_seg2_trans_m = scale(vector(0.3,0.83,0.78)); jaw_seg2_dv_m = vector(-1,0,0) * jaw_seg2_trans_m; jaw = list(leg_seg5 * jaw_seg1_trans, jaw_seg * jaw_seg2_trans * trans(jaw_seg1_dv), trans(jaw_seg2_dv)) * rotx(-90) * roty(-90) * scale(vector(1.5,1,1)) * roty(-10); jaw_m = list(leg_seg5_m * jaw_seg1_trans_m, jaw_seg_m * jaw_seg2_trans_m * trans(jaw_seg1_dv_m), trans(jaw_seg2_dv_m)) * rotx(-90) * roty(90) * scale(vector(1.5,1,1)) * roty(10); free(jaw_seg2_dv); free(jaw_seg1_dv); free(jaw_seg2_trans); free(jaw_seg1_trans); free(jaw_seg2_dv_m); free(jaw_seg1_dv_m); free(jaw_seg2_trans_m); free(jaw_seg1_trans_m); ###################################### ### the bottom of the head head_bottom_mesh = list( list( ctlpt(e3, 0, 0.5, 1), ctlpt(e3, 0, 1.5, 1), ctlpt(e3, 0, 2.5, 1), ctlpt(e3, 0, 4, 1), ctlpt(e3, 0, 6, 1), ctlpt(e3, 0, 8, 1), ctlpt(e3, 0, 9, 0.7) ),list( ctlpt(e3, 1.5, 0.5, 1), ctlpt(e3, 1.1, 1.5, 1), ctlpt(e3, 1.2, 2.5, 1), ctlpt(e3, 1.2, 4, 1), ctlpt(e3, 1.1, 6, 1), ctlpt(e3, 1, 8, 1), ctlpt(e3, 0.9, 9, 0.7) ),list( ctlpt(e3, 1.8, 0, 0.7), ctlpt(e3, 2.2, 1, 0.7), ctlpt(e3, 2.8, 2, 0.7), ctlpt(e3, 2.9, 4.5, 0.7), ctlpt(e3, 2.5, 6.5, 0.7), ctlpt(e3, 1.9, 8.2, 0.7), ctlpt(e3, 1.3, 9, 0.7) ),list( ctlpt(e3, 1.8, 0, 0.1), ctlpt(e3, 2.6, 0.9, 0.1), ctlpt(e3, 3.3, 2, 0.1), ctlpt(e3, 3.4, 5, 0.1), ctlpt(e3, 2.1, 7, 0.1), ctlpt(e3, 1.6, 8.5, 0.1), ctlpt(e3, 1.4, 9, 0.1) ),list( ctlpt(e3, 0.0, 0, 0), ctlpt(e3, 2.8, 0.8, 0), ctlpt(e3, 3.5, 2, 0), ctlpt(e3, 3.5, 5, 0), ctlpt(e3, 2.2, 7.1, 0), ctlpt(e3, 1.8, 8.5, 0), ctlpt(e3, 1.5, 9, 0) ) ); head_bottom_mesh_m = list( list( ctlpt(e3, -0.0, 0, 0), ctlpt(e3, -2.8, 0.8, 0), ctlpt(e3, -3.5, 2, 0), ctlpt(e3, -3.5, 5, 0), ctlpt(e3, -2.2, 7.1, 0), ctlpt(e3, -1.8, 8.5, 0), ctlpt(e3, -1.5, 9, 0) ),list( ctlpt(e3, -1.8, 0, 0.1), ctlpt(e3, -2.6, 0.9, 0.1), ctlpt(e3, -3.3, 2, 0.1), ctlpt(e3, -3.4, 5, 0.1), ctlpt(e3, -2.1, 7, 0.1), ctlpt(e3, -1.6, 8.5, 0.1), ctlpt(e3, -1.4, 9, 0.1) ),list( ctlpt(e3, -1.8, 0, 0.7), ctlpt(e3, -2.2, 1, 0.7), ctlpt(e3, -2.8, 2, 0.7), ctlpt(e3, -2.9, 4.5, 0.7), ctlpt(e3, -2.5, 6.5, 0.7), ctlpt(e3, -1.9, 8.2, 0.7), ctlpt(e3, -1.3, 9, 0.7) ),list( ctlpt(e3, -1.5, 0.5, 1), ctlpt(e3, -1.1, 1.5, 1), ctlpt(e3, -1.2, 2.5, 1), ctlpt(e3, -1.2, 4, 1), ctlpt(e3, -1.1, 6, 1), ctlpt(e3, -1, 8, 1), ctlpt(e3, -0.9, 9, 0.7) ),list( ctlpt(e3, -0, 0.5, 1), ctlpt(e3, -0, 1.5, 1), ctlpt(e3, -0, 2.5, 1), ctlpt(e3, -0, 4, 1), ctlpt(e3, -0, 6, 1), ctlpt(e3, -0, 8, 1), ctlpt(e3, -0, 9, 0.7) ) ); head_bottom_half = sbspline(3, 3, head_bottom_mesh, list(list(KV_OPEN), list(KV_OPEN))); head_bottom_half_m = sbspline(3, 3, head_bottom_mesh_m, list(list(KV_OPEN), list(KV_OPEN))); head_scale_factor = scale(vector(0.2,0.2,0.2)); head_bottom = list( head_bottom_half * scale(vector(-1,1,1)), head_bottom_half_m * scale(vector(-1,1,1)) ) * head_scale_factor; free(head_bottom_half); free(head_bottom_half_m); free(head_bottom_mesh); ###################################### ### the top of the head head_top_mesh = list( list( ctlpt(e3, 0, -1, .12), ctlpt(e3, 0, -0.5, 3), ctlpt(e3, 0, 2.0, 3.2), ctlpt(e3, 0, 4, 3), ctlpt(e3, 0, 6, 2.8), ctlpt(e3, 0, 8, 2.0), ctlpt(e3, 0, 9, 1.5) ),list( ctlpt(e3, 0.18, -1, .12), ctlpt(e3, 0.18, -0.5, 3), ctlpt(e3, 0.18, 2.0, 3.2), ctlpt(e3, 0.18, 4, 3), ctlpt(e3, 0.18, 6, 2.8), ctlpt(e3, 0.18, 8, 2.0), ctlpt(e3, 0.18, 9, 1.5) ),list( ctlpt(e3, 0.0, -1, 0.118), ctlpt(e3, 1.5, -0.5, 2.6), ctlpt(e3, 2.4, 2.0, 3.1), ctlpt(e3, 2.6, 4, 2.9), ctlpt(e3, 1.5, 6, 2.2), ctlpt(e3, 1.0, 8, 1.9), ctlpt(e3, 0.9, 9, 1.4) ),list( ctlpt(e3, 0.0, -1, 0.35), ctlpt(e3, 2.2, -0.6, 1.2), ctlpt(e3, 2.8, 2.5, 2.7), ctlpt(e3, 2.9, 4, 2.7), ctlpt(e3, 1.8, 6.5, 2.3), ctlpt(e3, 1.2, 8.2, 2.0), ctlpt(e3, 1.3, 9, 1.35) ),list( ctlpt(e3, 0.1, -1, 0.3), ctlpt(e3, 2.6, -0.8, 1.1), ctlpt(e3, 3.3, 2, 1.0), ctlpt(e3, 3.4, 5, 1.0), ctlpt(e3, 2.0, 7, 1.0), ctlpt(e3, 1.6, 8.5, 1.0), ctlpt(e3, 1.4, 9, 1.0) ),list( ctlpt(e3, 0.0, -1, 0.2), ctlpt(e3, 2.7, -0.8, 0.5), ctlpt(e3, 3.4, 2, 0.5), ctlpt(e3, 3.3, 5, 0.5), ctlpt(e3, 2.1, 7.1, 0.5), ctlpt(e3, 1.8, 8.5, 0.5), ctlpt(e3, 1.5, 9, 0.5) ),list( ctlpt(e3, 0.0, -1, 0.1), ctlpt(e3, 3.0, -0.8, 0.2), ctlpt(e3, 3.7, 2, 0.2), ctlpt(e3, 3.6, 5, 0.2), ctlpt(e3, 2.4, 7.1, 0.2), ctlpt(e3, 1.9, 8.5, 0.2), ctlpt(e3, 1.6, 9, 0.2) ),list( ctlpt(e3, 0.0, 0, 0), ctlpt(e3, 2.8, 0.8, 0), ctlpt(e3, 3.5, 2, 0), ctlpt(e3, 3.5, 5, 0), ctlpt(e3, 2.2, 7.1, 0), ctlpt(e3, 1.8, 8.5, 0), ctlpt(e3, 1.5, 9, 0) ) ); head_top_mesh_m = list( list( ctlpt(e3, -0.0, 0, 0), ctlpt(e3, -2.8, 0.8, 0), ctlpt(e3, -3.5, 2, 0), ctlpt(e3, -3.5, 5, 0), ctlpt(e3, -2.2, 7.1, 0), ctlpt(e3, -1.8, 8.5, 0), ctlpt(e3, -1.5, 9, 0) ),list( ctlpt(e3, -0.0, -1, 0.1), ctlpt(e3, -3.0, -0.8, 0.2), ctlpt(e3, -3.7, 2, 0.2), ctlpt(e3, -3.6, 5, 0.2), ctlpt(e3, -2.4, 7.1, 0.2), ctlpt(e3, -1.9, 8.5, 0.2), ctlpt(e3, -1.6, 9, 0.2) ),list( ctlpt(e3, -0.0, -1, 0.2), ctlpt(e3, -2.7, -0.8, 0.5), ctlpt(e3, -3.4, 2, 0.5), ctlpt(e3, -3.3, 5, 0.5), ctlpt(e3, -2.1, 7.1, 0.5), ctlpt(e3, -1.8, 8.5, 0.5), ctlpt(e3, -1.5, 9, 0.5) ),list( ctlpt(e3, -0.1, -1, 0.3), ctlpt(e3, -2.6, -0.8, 1.1), ctlpt(e3, -3.3, 2, 1.0), ctlpt(e3, -3.4, 5, 1.0), ctlpt(e3, -2.0, 7, 1.0), ctlpt(e3, -1.6, 8.5, 1.0), ctlpt(e3, -1.4, 9, 1.0) ),list( ctlpt(e3, -0.0, -1, 0.35), ctlpt(e3, -2.2, -0.6, 1.2), ctlpt(e3, -2.8, 2.5, 2.7), ctlpt(e3, -2.9, 4, 2.7), ctlpt(e3, -1.8, 6.5, 2.3), ctlpt(e3, -1.2, 8.2, 2.0), ctlpt(e3, -1.3, 9, 1.35) ),list( ctlpt(e3, -0.0, -1, 0.118), ctlpt(e3, -1.5, -0.5, 2.6), ctlpt(e3, -2.4, 2.0, 3.1), ctlpt(e3, -2.6, 4, 2.9), ctlpt(e3, -1.5, 6, 2.2), ctlpt(e3, -1.0, 8, 1.9), ctlpt(e3, -0.9, 9, 1.4) ),list( ctlpt(e3, -0.18, -1, .12), ctlpt(e3, -0.18, -0.5, 3), ctlpt(e3, -0.18, 2.0, 3.2), ctlpt(e3, -0.18, 4, 3), ctlpt(e3, -0.18, 6, 2.8), ctlpt(e3, -0.18, 8, 2.0), ctlpt(e3, -0.18, 9, 1.5) ),list( ctlpt(e3, -0, -1, .12), ctlpt(e3, -0, -0.5, 3), ctlpt(e3, -0, 2.0, 3.2), ctlpt(e3, -0, 4, 3), ctlpt(e3, -0, 6, 2.8), ctlpt(e3, -0, 8, 2.0), ctlpt(e3, -0, 9, 1.5) ) ); head_top_half = sbspline(3, 3, head_top_mesh, list(list(KV_OPEN), list(KV_OPEN))); head_top_half_m = sbspline(3, 3, head_top_mesh_m, list(list(KV_OPEN), list(KV_OPEN))); free(head_top_mesh); free(head_top_mesh_m); head_top = list( head_top_half, head_top_half_m) * head_scale_factor * scale(vector(1,1,-1)); head = list(head_top, head_bottom) * #head = list(head_bottom) * trans(vector(0,0,-1) * head_scale_factor); attrib(head, "rgb", "123,0,0"); free(head_top_half); free(head_top_half_m); free(head_top); free(head_bottom); ########################################################################### ########################################################################### ### the back ###################################### ### the bottom of the back back_bottom_mesh = list( list( ctlpt(e3, 0, 9, 0.7), ctlpt(e3, 0, 10.3, 1.3), ctlpt(e3, 0, 11.6, 1.5), ctlpt(e3, 0, 12.7, 1.6), ctlpt(e3, 0, 13.7, 1.4), ctlpt(e3, 0, 14.7, 1.2), ctlpt(e3, 0, 16, 0) ),list( ctlpt(e3, 0.9, 9, 0.7), ctlpt(e3, 0.1, 10.2, 1.3), ctlpt(e3, 0.1, 11.6, 1.5), ctlpt(e3, 0.1, 12.7, 1.6), ctlpt(e3, 0.1, 13.7, 1.4), ctlpt(e3, 0.1, 14.7, 1.2), ctlpt(e3, 0.0, 16, 0) ),list( ctlpt(e3, 0.9, 9, 0.7), ctlpt(e3, 0.2, 10.2, 1.3), ctlpt(e3, 0.2, 11.6, 1.5), ctlpt(e3, 0.2, 12.7, 1.6), ctlpt(e3, 0.2, 13.7, 1.4), ctlpt(e3, 0.2, 14.7, 1.2), ctlpt(e3, 0.0, 16, 0) ),list( ctlpt(e3, 0.9, 9, 0.7), ctlpt(e3, 0.3, 10.2, 1.3), ctlpt(e3, 0.3, 11.6, 1.5), ctlpt(e3, 0.3, 12.7, 1.6), ctlpt(e3, 0.3, 13.7, 1.4), ctlpt(e3, 0.3, 14.7, 1.2), ctlpt(e3, 0.0, 16, 0) ),list( ctlpt(e3, 1.3, 9, 0.7), ctlpt(e3, 0.8, 10.2, 1.2), ctlpt(e3, 0.9, 11.4, 1.4), ctlpt(e3, 0.9, 12.6, 1.4), ctlpt(e3, 0.7, 14, 1.3), ctlpt(e3, 0.5, 15, 1.1), ctlpt(e3, 0, 16, 0) ),list( ctlpt(e3, 1.4, 9, 0.1), ctlpt(e3, 1.8, 10.2, 0.6), ctlpt(e3, 2.2, 11.5, 0.7), ctlpt(e3, 2.0, 12.6, 0.75), ctlpt(e3, 1.5, 14.3, 0.7), ctlpt(e3, 0.8, 15.4, 0.5), ctlpt(e3, 0, 16, 0) ),list( ctlpt(e3, 1.5, 9, 0), ctlpt(e3, 2.1, 10.1, 0), ctlpt(e3, 2.6, 11.3, 0), ctlpt(e3, 2.4, 12.8, 0), ctlpt(e3, 1.6, 14.5, 0), ctlpt(e3, 0.8, 15.6, 0), ctlpt(e3, 0, 16, 0) ) ); back_bottom_mesh_m = list( list( ctlpt(e3, -1.5, 9, 0), ctlpt(e3, -2.1, 10.1, 0), ctlpt(e3, -2.6, 11.3, 0), ctlpt(e3, -2.4, 12.8, 0), ctlpt(e3, -1.6, 14.5, 0), ctlpt(e3, -0.8, 15.6, 0), ctlpt(e3, -0, 16, 0) ),list( ctlpt(e3, -1.4, 9, 0.1), ctlpt(e3, -1.8, 10.2, 0.6), ctlpt(e3, -2.2, 11.5, 0.7), ctlpt(e3, -2.0, 12.6, 0.75), ctlpt(e3, -1.5, 14.3, 0.7), ctlpt(e3, -0.8, 15.4, 0.5), ctlpt(e3, -0, 16, 0) ),list( ctlpt(e3, -1.3, 9, 0.7), ctlpt(e3, -0.8, 10.2, 1.2), ctlpt(e3, -0.9, 11.4, 1.4), ctlpt(e3, -0.9, 12.6, 1.4), ctlpt(e3, -0.7, 14, 1.3), ctlpt(e3, -0.5, 15, 1.1), ctlpt(e3, -0, 16, 0) ),list( ctlpt(e3, -0.9, 9, 0.7), ctlpt(e3, -0.3, 10.2, 1.3), ctlpt(e3, -0.3, 11.6, 1.5), ctlpt(e3, -0.3, 12.7, 1.6), ctlpt(e3, -0.3, 13.7, 1.4), ctlpt(e3, -0.3, 14.7, 1.2), ctlpt(e3, -0.0, 16, 0) ),list( ctlpt(e3, -0.9, 9, 0.7), ctlpt(e3, -0.2, 10.2, 1.3), ctlpt(e3, -0.2, 11.6, 1.5), ctlpt(e3, -0.2, 12.7, 1.6), ctlpt(e3, -0.2, 13.7, 1.4), ctlpt(e3, -0.2, 14.7, 1.2), ctlpt(e3, -0.0, 16, 0) ),list( ctlpt(e3, -0.9, 9, 0.7), ctlpt(e3, -0.1, 10.2, 1.3), ctlpt(e3, -0.1, 11.6, 1.5), ctlpt(e3, -0.1, 12.7, 1.6), ctlpt(e3, -0.1, 13.7, 1.4), ctlpt(e3, -0.1, 14.7, 1.2), ctlpt(e3, -0.0, 16, 0) ),list( ctlpt(e3, -0, 9, 0.7), ctlpt(e3, -0, 10.3, 1.3), ctlpt(e3, -0, 11.6, 1.5), ctlpt(e3, -0, 12.7, 1.6), ctlpt(e3, -0, 13.7, 1.4), ctlpt(e3, -0, 14.7, 1.2), ctlpt(e3, -0, 16, 0) ) ); back_bottom_half = sbspline(3, 3, back_bottom_mesh, list(list(KV_OPEN), list(KV_OPEN))); back_bottom_half_m = sbspline(3, 3, back_bottom_mesh_m, list(list(KV_OPEN), list(KV_OPEN))); free(back_bottom_mesh); free(back_bottom_mesh_m); back_bottom = list( back_bottom_half, back_bottom_half_m) * head_scale_factor; free(back_bottom_half); free(back_bottom_half_m); ###################################### ### the top of the back back_top_mesh = list( list( ctlpt(e3, 0, 9, -1.5), ctlpt(e3, 0, 10.3, -1.6), ctlpt(e3, 0, 11.6, -1.8), ctlpt(e3, 0, 12.7, -1.7), ctlpt(e3, 0, 13.7, -1.5), ctlpt(e3, 0, 14.7, -1.2), ctlpt(e3, 0, 16, -0) ),list( ctlpt(e3, 0.18, 9, -1.5), ctlpt(e3, 0.1, 10.2, -1.6), ctlpt(e3, 0.1, 11.6, -1.8), ctlpt(e3, 0.1, 12.7, -1.7), ctlpt(e3, 0.1, 13.7, -1.5), ctlpt(e3, 0.1, 14.7, -1.2), ctlpt(e3, 0.0, 16, -0) ),list( ctlpt(e3, 0.9, 9, -1.4), ctlpt(e3, 0.2, 10.2, -1.6), ctlpt(e3, 0.2, 11.6, -1.8), ctlpt(e3, 0.2, 12.7, -1.7), ctlpt(e3, 0.2, 13.7, -1.5), ctlpt(e3, 0.2, 14.7, -1.2), ctlpt(e3, 0.0, 16, -0) ),list( ctlpt(e3, 1.3, 9, -1.35), ctlpt(e3, 0.3, 10.2, -1.5), ctlpt(e3, 0.3, 11.6, -1.55), ctlpt(e3, 0.3, 12.7, -1.7), ctlpt(e3, 0.3, 13.7, -1.5), ctlpt(e3, 0.3, 14.7, -1.2), ctlpt(e3, 0.0, 16, -0) ),list( ctlpt(e3, 1.4, 9, -1.0), ctlpt(e3, 0.4, 10.2, -1.5), ctlpt(e3, 0.4, 11.6, -1.6), ctlpt(e3, 0.4, 12.7, -1.7), ctlpt(e3, 0.4, 13.7, -1.5), ctlpt(e3, 0.4, 14.7, -1.2), ctlpt(e3, 0.0, 16, -0) ),list( ctlpt(e3, 1.5, 9, -0.5), ctlpt(e3, 0.8, 10.2, -1.2), ctlpt(e3, 0.9, 11.4, -1.4), ctlpt(e3, 0.9, 12.6, -1.4), ctlpt(e3, 0.7, 14, -1.3), ctlpt(e3, 0.5, 15, -1.1), ctlpt(e3, 0, 16, -0) ),list( ctlpt(e3, 1.6, 9, -0.2), ctlpt(e3, 1.8, 10.2, -0.6), ctlpt(e3, 2.2, 11.5, -0.7), ctlpt(e3, 2.0, 12.6, -0.75), ctlpt(e3, 1.5, 14.3, -0.7), ctlpt(e3, 0.8, 15.4, -0.5), ctlpt(e3, 0, 16, -0) ),list( ctlpt(e3, 1.5, 9, -0), ctlpt(e3, 2.1, 10.1, -0), ctlpt(e3, 2.6, 11.3, -0), ctlpt(e3, 2.4, 12.8, -0), ctlpt(e3, 1.6, 14.5, -0), ctlpt(e3, 0.8, 15.6, -0), ctlpt(e3, 0, 16, -0) ) ); back_top_mesh_m = list( list( ctlpt(e3, -1.5, 9, -0), ctlpt(e3, -2.1, 10.1, -0), ctlpt(e3, -2.6, 11.3, -0), ctlpt(e3, -2.4, 12.8, -0), ctlpt(e3, -1.6, 14.5, -0), ctlpt(e3, -0.8, 15.6, -0), ctlpt(e3, -0, 16, -0) ),list( ctlpt(e3, -1.6, 9, -0.2), ctlpt(e3, -1.8, 10.2, -0.6), ctlpt(e3, -2.2, 11.5, -0.7), ctlpt(e3, -2.0, 12.6, -0.75), ctlpt(e3, -1.5, 14.3, -0.7), ctlpt(e3, -0.8, 15.4, -0.5), ctlpt(e3, -0, 16, -0) ),list( ctlpt(e3, -1.5, 9, -0.5), ctlpt(e3, -0.8, 10.2, -1.2), ctlpt(e3, -0.9, 11.4, -1.4), ctlpt(e3, -0.9, 12.6, -1.4), ctlpt(e3, -0.7, 14, -1.3), ctlpt(e3, -0.5, 15, -1.1), ctlpt(e3, -0, 16, -0) ),list( ctlpt(e3, -1.4, 9, -1.0), ctlpt(e3, -0.4, 10.2, -1.5), ctlpt(e3, -0.4, 11.6, -1.6), ctlpt(e3, -0.4, 12.7, -1.7), ctlpt(e3, -0.4, 13.7, -1.5), ctlpt(e3, -0.4, 14.7, -1.2), ctlpt(e3, -0.0, 16, -0) ),list( ctlpt(e3, -1.3, 9, -1.35), ctlpt(e3, -0.3, 10.2, -1.5), ctlpt(e3, -0.3, 11.6, -1.55), ctlpt(e3, -0.3, 12.7, -1.7), ctlpt(e3, -0.3, 13.7, -1.5), ctlpt(e3, -0.3, 14.7, -1.2), ctlpt(e3, -0.0, 16, -0) ),list( ctlpt(e3, -0.9, 9, -1.4), ctlpt(e3, -0.2, 10.2, -1.6), ctlpt(e3, -0.2, 11.6, -1.8), ctlpt(e3, -0.2, 12.7, -1.7), ctlpt(e3, -0.2, 13.7, -1.5), ctlpt(e3, -0.2, 14.7, -1.2), ctlpt(e3, -0.0, 16, -0) ),list( ctlpt(e3, -0.18, 9, -1.5), ctlpt(e3, -0.1, 10.2, -1.6), ctlpt(e3, -0.1, 11.6, -1.8), ctlpt(e3, -0.1, 12.7, -1.7), ctlpt(e3, -0.1, 13.7, -1.5), ctlpt(e3, -0.1, 14.7, -1.2), ctlpt(e3, -0.0, 16, -0) ),list( ctlpt(e3, -0, 9, -1.5), ctlpt(e3, -0, 10.3, -1.6), ctlpt(e3, -0, 11.6, -1.8), ctlpt(e3, -0, 12.7, -1.7), ctlpt(e3, -0, 13.7, -1.5), ctlpt(e3, -0, 14.7, -1.2), ctlpt(e3, -0, 16, -0) ) ); back_top_half = sbspline(3, 3, back_top_mesh, list(list(KV_OPEN), list(KV_OPEN))); back_top_half_m = sbspline(3, 3, back_top_mesh_m, list(list(KV_OPEN), list(KV_OPEN))); free(back_top_mesh); free(back_top_mesh_m); attrib(back_top_half, "rgb", "122,0,0"); attrib(back_top_half_m, "rgb", "122,0,0"); back_top = list( back_top_half * scale(vector(-1,1,1)), back_top_half_m * scale(vector(-1,1,1))) * head_scale_factor; back = list(back_top, back_bottom) * trans( vector(0,-9,0)*head_scale_factor ) * scale(vector(1,1.3,1)) * trans( vector(0,9,0)*head_scale_factor ) * scale(vector(-1,1,1)) * trans(vector(0,0,-1) * head_scale_factor); free(back_top); free(back_bottom); ############################################################################### ############################################################################### ### eyes eye1 = sphere(vector(0.45,0.15,-0.6),0.1); eye2 = sphere(vector(0.35,-0.05,-0.4),0.065); eye3 = sphere(vector(0.25,-0.08,-0.55),0.04); eye4 = sphere(vector(0.1,-0.1,-0.52),0.04); eye1_m = sphere(vector(-0.45,0.15,-0.6),0.1); eye2_m = sphere(vector(-0.35,-0.05,-0.4),0.065); eye3_m = sphere(vector(-0.25,-0.08,-0.55),0.04); eye4_m = sphere(vector(-0.1,-0.1,-0.52),0.04); attrib(eye1, "rgb", "0,0,0"); attrib(eye2, "rgb", "0,0,0"); attrib(eye3, "rgb", "0,0,0"); attrib(eye4, "rgb", "0,0,0"); attrib(eye1_m, "rgb", "0,0,0"); attrib(eye2_m, "rgb", "0,0,0"); attrib(eye3_m, "rgb", "0,0,0"); attrib(eye4_m, "rgb", "0,0,0"); ###################################### ### all the legs leg_offset_scale_factor = head_scale_factor * scale(vector(0.95,0.95,-0.5)); leg0_offset = vector(2.3,1.4,1) * leg_offset_scale_factor; leg1_offset = vector(2.9,2,1) * leg_offset_scale_factor; leg2_offset = vector(3.0,5,1) * leg_offset_scale_factor; leg3_offset = vector(2.4,7,1) * leg_offset_scale_factor; leg4_offset = vector(1.9,8.2,1) * leg_offset_scale_factor; leg0_offset_m = vector(-2.3,1.4,1) * leg_offset_scale_factor; leg1_offset_m = vector(-2.9,2,1) * leg_offset_scale_factor; leg2_offset_m = vector(-3.0,5,1) * leg_offset_scale_factor; leg3_offset_m = vector(-2.4,7,1) * leg_offset_scale_factor; leg4_offset_m = vector(-1.9,8.2,1) * leg_offset_scale_factor; jaw_offset = vector(0.26,-0.05,-0.3); jaw_trans = scale(vector(0.6,0.6,0.6)) * trans(jaw_offset); jaw_offset_m = vector(-0.26,-0.05,-0.3); jaw_trans_m = scale(vector(0.6,0.6,0.6)) * trans(jaw_offset_m); legs = list( leg0 * trans(leg0_offset), leg0_m * trans(leg0_offset_m), leg1 * trans(leg1_offset), leg1_m * trans(leg1_offset_m), leg2 * trans(leg2_offset), leg2_m * trans(leg2_offset_m), leg3 * trans(leg3_offset), leg3_m * trans(leg3_offset_m), leg4 * trans(leg4_offset), leg4_m * trans(leg4_offset_m) ); attrib(legs, "reflect", 0.2); eyes = list( eye1, eye1_m, eye2, eye2_m, eye3, eye3_m, eye4, eye4_m ); attrib(eyes, "reflect", 0.8); jaws = list( jaw * jaw_trans, jaw_m * jaw_trans_m ); attrib(head, "texture", "image texture1.ppm"); spider = list( head, back, legs, jaws, eyes ); #view(spider, true); #attrib(spider, "resolution", 3); ############################################################# ############################################################# ### net step = 30; rotstepz = rotz(step); net_seg = poly(list(vector(0,0.,0), vector(0,4.,0)), true); net = net_seg; attrib(net_seg, "rgb", "192,192,192"); for( 0, 30 , 360, net_seg = net_seg * rotstepz : net = net + net_seg ); attrib(net, "rgb", "192,192,192"); #rotstepz = scale(vector(1,1,1)); scalestep = scale(vector(1.01,1.01,1.01)); scalevect = vector(1.01,1.01,1.01); currvec = vector(0,0.1,0); for( 0, 30, 360 * 15, next_vec = currvec * rotstepz * scale(scalevect) : net_seg = poly(list(currvec, next_vec), true) * rotstepz : currvec = next_vec : scalevect = scalevect + vector(0.0001,0.0001,0.0001): net = net + net_seg ); ################################################################## ### The corner the spider sits in box_p1 = poly(list( vector(0,0,0), vector(6,0,0), vector(6,6,0), vector(0,6,0) ),false); box_p2 = poly(list( vector(0,0,0), vector(0,6,0), vector(0,6,6), vector(0,0,6) ),false); box_p3 = poly(list( vector(0,0,0), vector(6,0,0), vector(6,0,6), vector(0,0,6) ),false); corner = box_p1 + box_p2 + box_p3; #attrib(corner, "texture", "wood"); attrib(corner, "rgb", "200,100,100"); #web = net * roty(45) * rotvec(vector(1,0,-1),-45) * trans(vector(3.1,3.1,3.1)); #web = net * roty(45) * trans(vector(3,3,3)); web_trans = roty(45) * rotvec(vector(1,0,-1),135) * trans(vector(3.1,3.1,3.1)); spider_on_web = list( spider * scale(vector(0.6,0.6,0.6)) * trans(vector(0,0,-0.08)), net); attrib(corner, "texture", "wood,1"); scene = list(corner, spider_on_web * web_trans); #view(scene, true); #save("scene.dat", scene); #save("spider.dat", spider);