# # All Terrain Vehicle - ATV (Trucktoron) # # This model is based on the Polaris Trail Boss ATV. # # Written by: # # Eran Yahav s2556713@csc # Zviki Cohen zviki@tx # # # Special thanks goes to... # # Sela Gershony - for sketching the model # Noy Cohen - for taking pictures of the model # resolution = 30; iritstate( "Coplanar", TRUE); engineSide = poly(list( vector( 0.0, 0.0, 0.0 ), vector( 0.0, 1.0, 0.0 ), vector( 3.0, 1.3, 0.0 ), vector( 3.1, 0.7, 0.0 ), vector( 2.6, 0.7, 0.0 ), vector( 2.4, 0.0, 0.0 )), FALSE); engine = extrude( engineSide, vector (0,0,-1)); seatSide = cbspline(3, list ( vector(0.0, 1.0, 0.0 ) , vector(0.0, 1.0, 0.0 ) , vector(3.0, 1.3, 0.0 ) ) , list(KV_OPEN)) + cbspline(3, list ( vector(3.0, 1.3, 0.0 ) , vector(3.0, 1.3, 0.0 ) , vector(3.0, 2.0, 0.0 ) ) , list(KV_OPEN)) + cbspline(3, list ( vector(3.0, 2.0, 0.0 ) , vector(1.8, 1.8, 0.0 ) , vector(1.1, 2.0, 0.0 ) , vector(0.5, 2.6, 0.0 ) ) , list(KV_OPEN) ) + cbspline(3, list ( vector( 0.5, 2.6, 0.0 ) , vector(-0.1, 2.4, 0.0 ) , vector(-0.8, 2.1, 0.0 ) , vector(-1.9, 1.5, 0.0 ) ) , list(KV_OPEN) ) + cbspline(3, list ( vector(-1.9, 1.5, 0.0 ) , vector(-0.8, 1.45, 0.0 ) , vector(-0.4, 1.4, 0.0 ) , vector( 0.0, 1.0, 0.0 ) ) , list(KV_OPEN) ) ; seat = list ( extrude( seatSide, vector (0,0,-1)) , boolone( seatSide ) , ( boolone( seatSide ) * trans( vector ( 0, 0, -1) ) ) ) ; body = list (seat, engine); bottomCurve = cbspline( 3, list ( vector( -0.37600, 0.56600, 0.0000 ) , vector( -0.24400, 0.56200, 0.0000 ) , vector( -0.21200, 0.52600, 0.0000 ) , vector( -0.29200, 0.45000, 0.00000 ) , vector( -0.28800, 0.43000, 0.00000 ) , vector( -0.18400, 0.26800, 0.00000 ) , vector( -0.16400, 0.26000, 0.00000 ) , vector( 0.02400, 0.22800, 0.00000 ) , vector( 0.06000, 0.11200, 0.00000 ) , vector( 0.06000 ,-0.20400, 0.00000 ) , vector( -0.00800 ,-0.26400, 0.00000 ) , vector( -0.22000 ,-0.26400, 0.00000 ) , vector( -0.27200 ,-0.28400, 0.00000 ) , vector( -0.30000 ,-0.52400, 0.00000 ) ) , list(KV_OPEN)); bottom1 = bottomCurve * scale(vector(0.8,1.0,1.0)); bottom2 = bottom1 * roty(180) * trans(vector(-0.6,0,0)); bottomSide = bottom2 + (-bottom1); bottomClose = ruledsrf ( bottom1, bottom2 ); bottom = list ( extrude( bottomSide, vector (0,0,0.01)) , bottomClose , (bottomClose * trans(vector(0,0,0.01))) ); bottom = bottom * roty(90) * rotz(90) * scale(vector(4.5,3.5,3.5)) * trans(vector(1.21,0,-1.549)); # front wings fwCrv1 = cbspline(3, list ( vector(-1.9, 1.5, 0.0 ) , vector(-0.8, 1.45, 0.0 ) , vector(-0.4, 1.4, 0.0 ) , vector( 0.0, 1.0, 0.0 ) , vector( 0.0, 1.0, 0.0 ) , vector( 0.0, 0.0, 0.0 ) ) , list(KV_OPEN)); fwCrv2 = cbspline(3, list ( vector(-1.9, 1.6, 0.3 ) , vector(-0.8, 1.95, 0.3 ) , vector(-0.4, 1.9, 0.3 ) , vector(-0.2, 1.5, 0.3 ) , vector( 0.0, 0.9, 0.3 ) , vector( 0.2, 0.5, 0.3 ) , vector( 0.3, 0.0, 0.3 ) ) , list(KV_OPEN)); fwCrv3 = cbspline(3, list ( vector(-1.9, 1.6, 0.7 ) , vector(-0.8, 1.95, 0.7 ) , vector(-0.4, 1.9, 0.7 ) , vector(-0.2, 1.5, 0.7 ) , vector( 0.0, 0.9, 0.7 ) , vector( 0.2, 0.5, 0.7 ) , vector( 0.3, 0.0, 0.7 ) ) , list(KV_OPEN)); fwCrv4 = cbspline(3, list ( vector(-1.9, 1.5, 1.0 ) , vector(-0.8, 1.45, 1.0 ) , vector(-0.4, 1.4, 1.0 ) , vector( 0.0, 0.0, 1.0 ) ) , list(KV_OPEN)); fwCrvs1 = list(fwCrv1, fwCrv2, fwCrv3, fwCrv4); fwCrvs2 = list( (fwCrv4 * trans( vector( 0, 0, -1.0 ) ) ), (fwCrv3 * trans( vector( 0, 0, -0.4 ) ) ), (fwCrv2 * trans( vector( 0, 0, 0.4 ) ) ), (fwCrv1 * trans( vector( 0, 0, 1.0 ) ) ) ); frontWing1 = sfromcrvs(fwCrvs1,4); frontWing2 = sfromcrvs(fwCrvs2,4) * trans( vector(0.0, 0.0, -2.0) ); frontWings = list(frontWing1, frontWing2); # back wings bkCrv1 = cbspline(3, list ( vector( 2.2, 0.0, 0.0 ) , vector( 2.4, 1.0, 0.0 ) , vector( 2.6, 1.3, 0.0 ) , vector( 3.0, 1.6, 0.0 ) , vector( 4.2, 1.6, 0.0 ) ) , list(KV_OPEN)); bkCrv2 = cbspline(3, list ( vector( 2.2, 0.0, 0.3 ) , vector( 2.4, 1.5, 0.3 ) , vector( 2.6, 1.8, 0.3 ) , vector( 3.0, 2.1, 0.3 ) , vector( 4.2, 1.6, 0.3 ) ) , list(KV_OPEN)); bkCrv3 = cbspline(3, list ( vector( 2.2, 0.0, 0.7 ) , vector( 2.4, 1.5, 0.7 ) , vector( 2.6, 1.8, 0.7 ) , vector( 3.0, 2.1, 0.7 ) , vector( 4.2, 1.6, 0.7 ) ) , list(KV_OPEN)); bkCrv4 = cbspline(3, list ( vector( 2.2, 0.0, 1.0 ) , vector( 2.4, 1.0, 1.0 ) , vector( 2.6, 1.3, 1.0 ) , vector( 3.0, 1.6, 1.0 ) , vector( 4.2, 1.6, 1.0 ) ) , list(KV_OPEN)); bkCrvs1 = list(bkCrv1, bkCrv2, bkCrv3, bkCrv4); bkCrvs2 = list( (bkCrv4 * trans( vector( 0, 0, -1.0 ) ) ), (bkCrv3 * trans( vector( 0, 0, -0.4 ) ) ), (bkCrv2 * trans( vector( 0, 0, 0.4 ) ) ), (bkCrv1 * trans( vector( 0, 0, 1.0 ) ) ) ); backWing1 = sfromcrvs(bkCrvs1,4); backWing2 = sfromcrvs(bkCrvs2,4) * trans( vector(0.0, 0.0, -2.0) ); backWings = list(backWing1, backWing2); wings = list (frontWings, backWings); # wheels out = torus ( vector( 0.0, 0.0, 0.0 ) , # center vector( 0.0, 0.0, 1.0 ) , # normal 1.6 , 0.7 ); in = cylin ( vector( 0.0, 0.0, 0.0 ) , # center vector( 0.0, 0.0, 0.6 ) , # direction 1.2 ); in = in * trans( vector( 0,0,-0.3)); wheel = list (in, out) ; attrib ( in, "rgb", "125,125,160" ); attrib ( out, "rgb", "15,15,15" ); attrib ( in, "reflect", 0.8); attrib ( out, "reflect", 0); wheel = wheel * scale( vector(0.42,0.42,0.60)); wheel1 = wheel * trans( vector( -0.9, 0.0, -1.55 ) ); wheel2 = wheel * trans( vector( -0.9, 0.0, 0.55 ) ); wheel3 = wheel * trans( vector( 3.2, 0.0, -1.55 ) ); wheel4 = wheel * trans( vector( 3.2, 0.0, 0.55 ) ); wheels = list( wheel1, wheel2, wheel3, wheel4 ); #back axle ( backAxle) bxShort = cylin ( vector ( 3.3, 0.0, -0.5 ), vector ( -0.3, 0.0, 0.0 ), 0.2 ); bxLong = cylin ( vector ( 3.2, 0.0, 0.55 ), vector ( 0.0, 0.0, -2 ), 0.05 ); bxUp = cylin ( vector ( 3.2, 0.0, -0.5 ), vector ( -0.6, 0.7, 0.0 ), 0.055 ); backAxle = list ( bxLong, bxShort, bxUp ); # Front Axle # Front Triangle frTri = list ( cylin ( vector ( -2.1, 1.35, 0.4 ), vector ( 0.0, 0.0, -1.8 ), 0.09 ), cylin ( vector ( -2.1, 1.35, 0.2 ), vector ( 1.1, -1.35, -0.5 ), 0.05 ), cylin ( vector ( -2.1, 1.35, -1.2 ), vector ( 1.1, -1.35, 0.5 ), 0.05 ), cylin ( vector ( -2.1, 1.35, -0.5 ), vector ( 1.1, -1.35, 0.0 ), 0.05 ), cylin ( vector ( -2.1, 1.35, 0.2 ), vector ( 0.5, 0.15, -0.3 ), 0.05 ), cylin ( vector ( -2.1, 1.35, -1.2 ), vector ( 0.5, 0.15, 0.3 ), 0.05 ) ); frAxle = list ( cylin ( vector ( -0.9, 0.0, 0.55 ), vector ( 0.0, 0.0, -2 ), 0.05 ) ); frontAxle = list ( frTri , frAxle); axles = list ( backAxle, frontAxle); # front light lightBox = box ( vector( 0.3, 2.5, -0.2 ), -1.3, -0.7, -0.6 ); lightBulb = box ( vector( 0.3, 2.4, -0.3 ), -1.32, -0.4, -0.4 ); attrib ( lightBox, "rgb", "150,150,150" ); attrib ( lightBulb, "rgb", "200,200,10" ); light = list (lightBox, lightBulb) * rotz( -15 ) * trans(vector(-0.21,0.05,0)); attrib( light, "reflect", 0.9 ); # steering strCirc = circle( vector(0,0,0), 0.04 ); strShape1 = cbspline( 3, list ( vector ( -0.4 , 2.6, -0.5 ) , vector ( -0.3 , 2.9, -0.2 ) , vector ( -0.15 , 3.2, 0.1 ) , vector ( 0.0 , 3.5, 0.3 ) , vector ( 0.0 , 3.55, 0.5 ) , vector ( 0.05 , 3.6, 0.7 ) , vector ( 0.1 , 3.6, 0.9 ) ), list ( KV_OPEN ) ); strShape2 = cbspline( 3, list ( vector ( 0.1 , 3.6, -1.9 ) , vector ( 0.05 , 3.6, -1.7 ) , vector ( 0.0 , 3.55,-1.5 ) , vector ( 0.0 , 3.5, -1.3 ) , vector ( -0.15 , 3.2, -1.1 ) , vector ( -0.3 , 2.9, -0.8 ) , vector ( -0.4 , 2.6, -0.5 ) ) , list ( KV_OPEN ) ); str1 = sweepsrf( strCirc, strShape1, OFF ); str2 = sweepsrf ( strCirc, strShape2, OFF ); steer = list ( str1, str2 ); frontAcc = list ( light, steer ); # back accessories # lowNet netCirc = circle( vector(0,0,0), 0.07 ); netY = 2.0; netFrame = cbspline ( 3, list ( vector ( 3.1, netY, -0.5 ) , vector ( 3.1, netY, -1.1 ) , vector ( 2.6, netY, -1.1 ) , vector ( 2.6, netY, -2.0 ) , vector ( 4.1, netY, -2.0 ) , vector ( 4.1, netY, -1.1 ) , vector ( 4.4, netY, -1.1 ) , vector ( 4.4, netY, 0.1 ) , vector ( 4.1, netY, 0.1 ) , vector ( 4.1, netY, 1.0 ) , vector ( 2.6, netY, 1.0 ) , vector ( 2.6, netY, 0.1 ) , vector ( 3.1, netY, 0.1 ) , vector ( 3.1, netY, -0.5 ) ), list ( KV_OPEN ) ); net = sweepsrf( netCirc, netFrame, OFF ); lowBars = list ( cylin ( vector ( 2.9 , netY, -1.1 ) , vector ( 1.25, 0.0, 0.0 ) , 0.055 ) , cylin ( vector ( 2.9 , netY, 0.1 ) , vector ( 1.25, 0.0, 0.0 ) , 0.055 ) , cylin ( vector ( 3.6, netY, -2.0 ) , vector ( 0.0, 0.0, 3.0 ) , 0.055 ) ); lowNet = list ( net, lowBars ); # upper bars bigCirc = circle( vector(0,0,0), 0.065 ); bigShape = cbspline ( 3 , list ( vector ( 2.63, 2.0, -1.7 ) , vector ( 2.6, 3.0, -2.0 ) , vector ( 4.1, 6.0, -1.6 ) , vector ( 4.1, 6.0, -1.6 ) , # vector ( 4.1, 6.0, -1.6 ) , # vector ( 4.1, 6.0, 0.6 ) , vector ( 4.1, 6.0, 0.6 ) , vector ( 4.1, 6.0, 0.6 ) , vector ( 2.6, 3.0, 1.0 ) , vector ( 2.63, 2.0, 0.7 ) ), list ( KV_OPEN ) ); bigBars = sweepsrf ( bigCirc, bigShape, OFF ) ; upperBars = list ( cylin ( vector ( 4.1 , 6.0, -1.5 ) , vector ( 0.0 , -4.0, 0.0 ) , 0.055 ) , cylin ( vector ( 4.1, 6.0, 0.5 ) , vector ( 0.0, -4.0, 0.0 ) , 0.055 ) , cylin ( vector ( 4.1 , 6.0, -1.0 ) , vector ( 0.3 , -4.0, 0.0 ) , 0.045 ) , cylin ( vector ( 4.1, 6.0, 0.0 ) , vector ( 0.3, -4.0, 0.0 ) , 0.045 ) ); upperNet = list ( upperBars, bigBars ); backAcc = list ( lowNet, upperNet ); accessories = list ( backAcc, frontAcc ); # coloring ! attrib ( seat, "rgb", "040,040,240" ); attrib ( engine, "rgb", "40,45,40" ); attrib ( axles, "rgb", "20,20,60" ); attrib ( bottom, "rgb", "40,20,15" ); attrib ( frontWings, "rgb", "150,150,150" ); attrib ( backWings, "rgb", "140,140,140" ); attrib ( steer, "rgb", "100,20,20" ); attrib ( upperNet, "rgb", "0,0,60" ); attrib ( lowNet, "rgb", "020,020,255" ); attrib ( frontAxle, "rgb", "30,0,0" ); attrib ( backAxle, "rgb", "30,0,0" ); # assembling the complete ATV atv = list( accessories, axles, wheels, bottom, body, wings ); viewstate("DblBuffer"); view(list(atv),TRUE); save("atv",atv); # view( axes, FALSE );