Spaceship Model in Sandy 3d Spaceship Model in Sandy runouw forked:2favorite:0lines:472license : All rights reserved modified : 2009-04-13 09:29:39 Embed Tweet // 3d Spaceship Model in Sandy package { import flash.display.*; import flash.events.*; [SWF(width="465",height="465",backgroundColor="0x000000",frameRate="30")] public class AS3Code extends Sprite { public function AS3Code() { main=this; initialize(); addEventListener(Event.ENTER_FRAME, EveryFrame); } } } import flash.display.*; import flash.events.*; // import sandy.core.Scene3D; import sandy.core.data.*; import sandy.core.scenegraph.*; import sandy.materials.*; import sandy.materials.attributes.*; import sandy.primitive.*; // var main:Sprite; // var scene:Scene3D; var camera:Camera3D; var root:Group; var lightA:LightAttributes = new LightAttributes (true, 0.5); var lightB:GouraudAttributes = new GouraudAttributes (true, 0.25); var arwing:Arwing; function initialize():void { camera = new Camera3D( 465, 465); camera.z = -1200; camera.y = 100; root = new Group(); lightA.diffuse = 0.5; lightA.specular = 0.5; lightA.gloss = 1; lightA.ambient = 0.5; lightB.diffuse = 2.5; lightB.specular = 1.5; lightB.gloss = 1; lightB.ambient = 0.4; arwing = new Arwing( "arwing"); var materialAttr:MaterialAttributes = new MaterialAttributes(lightB); var colorArray:Array = []; for(var i:int=0;i<212;i++){ if(i > 0 && i <20){ colorArray[i] = 0x212E9A; }else{ colorArray[i] = 0xAAAAAA; } } var material:Material = new ColorMaterial2( 0xAAAAAA, 1, materialAttr, colorArray); material.lightingEnable = true; arwing.appearance = new Appearance(material) arwing.rotateX = 80; root.addChild(arwing); scene = new Scene3D( "scene", main, camera, root ); scene.light.color = 0xFFFFFF; scene.light.setDirection(0, -100, 0); scene.light.setPower(2.5); } function EveryFrame(event:Event):void{ arwing.rotateY+=5; scene.render(); } class Arwing extends Shape3D implements Primitive3D { private var l:Geometry3D; private function f(v1:Number,v2:Number,v3:Number,uv00:Number,uv01:Number,uv10:Number,uv11:Number,uv20:Number,uv21:Number,normX:Number,normY:Number,normZ:Number):void { var uv1:Number = l.getNextUVCoordID(); var uv2:Number = uv1 + 1; var uv3:Number = uv2 + 1; l.setUVCoords(uv1,uv00,1-uv01); l.setUVCoords(uv2,uv10,1-uv11); l.setUVCoords(uv3,uv20,1-uv21); l.setFaceVertexIds(l.getNextFaceID(), v1,v2,v3); l.setFaceUVCoordsIds(l.getNextFaceUVCoordID(), uv1,uv2,uv3); l.setFaceNormal(l.getNextFaceNormalID(), normX,normZ,normY); } private function f2(v1:Number,v2:Number,v3:Number):void { l.setFaceVertexIds(l.getNextFaceID(), v1,v2,v3); } private function v(vx:Number,vy:Number,vz:Number):void { l.setVertex(l.getNextVertexID(),vx,vz,vy); } public function Arwing( p_Name:String=null ) { super( p_Name ); geometry = generate(); } public function generate(... arguments):Geometry3D { l = new Geometry3D(); v(1.000000,1.000000,-0.683356); v(0.944110,-1.095600,-0.645164); v(-0.944111,-1.095600,-0.645164); v(-1.000000,1.000000,-0.683356); v(1.000000,0.999999,0.683356); v(0.944110,-1.095600,0.645164); v(-0.944111,-1.095600,0.645164); v(-1.000000,1.000000,0.683356); v(-0.679618,-4.902941,0.464420); v(0.679615,-4.902942,0.464420); v(-0.679618,-4.902941,-0.464421); v(0.679616,-4.902941,-0.464421); v(0.065945,-8.797762,-0.045066); v(-0.065950,-8.797762,-0.045066); v(0.065945,-8.797762,0.045065); v(-0.065950,-8.797762,0.045065); v(-1.000000,-1.000000,0.204147); v(-1.000000,1.000000,0.204147); v(1.000000,0.999999,0.204147); v(0.999999,-1.000001,0.204147); v(-1.000000,1.000000,-0.204147); v(-1.000000,-1.000000,-0.204147); v(1.000000,-1.000000,-0.204147); v(1.000000,1.000000,-0.204147); v(2.083799,-1.000000,-0.204147); v(2.083799,1.000000,-0.204147); v(2.083800,0.999999,0.204147); v(2.083798,-1.000001,0.204147); v(-2.083798,1.000000,-0.204147); v(-2.083799,-1.000000,-0.204147); v(-2.083800,-1.000000,0.204147); v(-2.083798,1.000000,0.204147); v(-2.222009,-1.535249,0.123641); v(-2.222008,1.535249,0.123641); v(2.222010,1.535248,0.123641); v(2.222007,-1.535251,0.123641); v(-2.222008,1.535250,-0.123641); v(-2.222009,-1.535249,-0.123641); v(2.222008,-1.535249,-0.123641); v(2.222008,1.535249,-0.123641); v(4.019095,1.491733,-0.098951); v(4.019095,-0.121116,-0.098951); v(4.019097,1.491732,0.098950); v(4.019093,-0.121116,0.098950); v(-4.019095,-0.121115,-0.098951); v(-4.019093,1.491733,-0.098951); v(-4.019096,-0.121115,0.098950); v(-4.019094,1.491733,0.098950); v(-4.111470,-0.121115,0.098950); v(-4.111467,1.491733,0.098950); v(4.111471,1.491732,0.098950); v(4.111466,-0.121116,0.098950); v(-4.111467,1.491733,-0.098951); v(-4.111469,-0.121115,-0.098951); v(4.111469,-0.121116,-0.098951); v(4.111469,1.491733,-0.098951); v(5.027250,-0.494357,-0.068746); v(5.027250,1.118492,-0.068746); v(5.027252,1.118491,0.068746); v(5.027246,-0.494357,0.068746); v(-5.027248,-0.494357,-0.068746); v(-5.027246,1.118492,-0.068746); v(-5.027249,-0.494357,0.068746); v(-5.027246,1.118492,0.068746); v(-5.693155,-1.072972,0.039673); v(-5.693151,1.107409,0.039673); v(5.693157,1.107409,0.039673); v(5.693150,-1.072973,0.039673); v(-5.693151,1.107410,-0.039674); v(-5.693153,-1.072972,-0.039674); v(5.693154,-1.072972,-0.039674); v(5.693154,1.107409,-0.039674); v(7.845545,0.625659,-0.019098); v(7.845545,0.384196,-0.019098); v(7.845547,0.625659,0.019098); v(7.845538,0.384196,0.019098); v(-7.845544,0.384196,-0.019098); v(-7.845539,0.625659,-0.019098); v(-7.845545,0.384196,0.019098); v(-7.845539,0.625659,0.019098); v(-0.696005,-0.680794,0.748494); v(-0.696005,0.770009,1.053621); v(0.696004,-0.680795,0.748494); v(0.696005,0.770009,1.053621); v(0.372146,-0.646706,0.855366); v(0.372146,0.557490,1.738617); v(-0.372146,0.557491,1.738617); v(-0.372146,-0.646706,0.855366); v(0.045225,3.751054,0.030905); v(-0.045224,3.751054,0.030905); v(-0.045224,3.751054,-0.030904); v(0.045225,3.751054,-0.030904); v(-1.975420,-0.800000,0.218665); v(-1.975419,0.800000,0.218665); v(1.975420,0.799999,0.218665); v(1.975418,-0.800001,0.218665); v(-1.108380,0.800000,0.218665); v(-1.108380,-0.800000,0.218665); v(1.108379,-0.800001,0.218665); v(1.108380,0.799999,0.218665); v(-1.498548,5.517805,1.838372); v(-1.498548,-5.517756,0.497377); v(1.498547,-5.517806,0.497371); v(1.498548,5.517756,1.838366); v(1.585251,5.517756,1.838366); v(1.585251,-5.517806,0.497371); v(-1.585252,-5.517756,0.497377); v(-1.585251,5.517805,1.838372); f2(101,100,107); f2(101,107,106); f2(103,102,105); f2(103,105,104); f2(93,92,106); f2(93,106,107); f2(95,94,105); f2(94,104,105); f2(96,93,107); f2(96,107,100); f2(92,97,101); f2(92,101,106); f2(98,95,105); f2(98,105,102); f2(94,99,103); f2(94,103,104); f2(99,98,102); f2(99,102,103); f2(97,96,101); f2(96,100,101); f2(16,17,96); f2(16,96,97); f2(18,19,98); f2(18,98,99); f2(26,18,94); f2(18,99,94); f2(19,27,98); f2(27,95,98); f2(30,16,92); f2(16,97,92); f2(17,31,96); f2(31,93,96); f2(27,26,94); f2(27,94,95); f2(31,30,92); f2(31,92,93); f2(88,91,90); f2(88,90,89); f2(0,3,90); f2(0,90,91); f2(4,0,88); f2(0,91,88); f2(3,7,89); f2(3,89,90); f2(7,4,88); f2(7,88,89); f2(85,86,87); f2(85,87,84); f2(81,80,87); f2(81,87,86); f2(80,82,87); f2(82,84,87); f2(83,81,85); f2(81,86,85); f2(82,83,84); f2(83,85,84); f2(5,4,82); f2(4,83,82); f2(4,7,81); f2(4,81,83); f2(6,5,82); f2(6,82,80); f2(7,6,80); f2(7,80,81); f2(76,78,79); f2(76,79,77); f2(72,74,73); f2(74,75,73); f2(64,65,78); f2(65,79,78); f2(66,67,75); f2(66,75,74); f2(65,68,77); f2(65,77,79); f2(69,64,76); f2(64,78,76); f2(68,69,76); f2(68,76,77); f2(67,70,75); f2(70,73,75); f2(71,66,72); f2(66,74,72); f2(70,71,73); f2(71,72,73); f2(56,57,71); f2(56,71,70); f2(57,58,71); f2(58,66,71); f2(59,56,67); f2(56,70,67); f2(61,60,68); f2(60,69,68); f2(60,62,69); f2(62,64,69); f2(63,61,68); f2(63,68,65); f2(58,59,66); f2(59,67,66); f2(62,63,65); f2(62,65,64); f2(48,49,63); f2(48,63,62); f2(50,51,58); f2(51,59,58); f2(49,52,61); f2(49,61,63); f2(53,48,60); f2(48,62,60); f2(52,53,61); f2(53,60,61); f2(51,54,59); f2(54,56,59); f2(55,50,57); f2(50,58,57); f2(54,55,57); f2(54,57,56); f2(41,40,55); f2(41,55,54); f2(40,42,55); f2(42,50,55); f2(43,41,51); f2(41,54,51); f2(45,44,52); f2(44,53,52); f2(44,46,53); f2(46,48,53); f2(47,45,52); f2(47,52,49); f2(42,43,51); f2(42,51,50); f2(46,47,49); f2(46,49,48); f2(32,33,46); f2(33,47,46); f2(34,35,43); f2(34,43,42); f2(33,36,45); f2(33,45,47); f2(37,32,44); f2(32,46,44); f2(36,37,44); f2(36,44,45); f2(35,38,43); f2(38,41,43); f2(39,34,40); f2(34,42,40); f2(38,39,41); f2(39,40,41); f2(24,25,39); f2(24,39,38); f2(25,26,34); f2(25,34,39); f2(27,24,38); f2(27,38,35); f2(28,29,37); f2(28,37,36); f2(29,30,37); f2(30,32,37); f2(31,28,33); f2(28,36,33); f2(26,27,34); f2(27,35,34); f2(30,31,33); f2(30,33,32); f2(17,20,28); f2(17,28,31); f2(21,16,29); f2(16,30,29); f2(20,21,28); f2(21,29,28); f2(19,22,27); f2(22,24,27); f2(23,18,25); f2(18,26,25); f2(22,23,25); f2(22,25,24); f2(1,0,22); f2(0,23,22); f2(0,4,18); f2(0,18,23); f2(5,1,19); f2(1,22,19); f2(3,2,21); f2(3,21,20); f2(2,6,21); f2(6,16,21); f2(7,3,20); f2(7,20,17); f2(4,5,19); f2(4,19,18); f2(6,7,16); f2(7,17,16); f2(12,14,15); f2(12,15,13); f2(9,8,15); f2(9,15,14); f2(8,10,15); f2(10,13,15); f2(11,9,12); f2(9,14,12); f2(10,11,12); f2(10,12,13); f2(2,1,11); f2(2,11,10); f2(1,5,11); f2(5,9,11); f2(6,2,8); f2(2,10,8); f2(5,6,8); f2(5,8,9); f2(0,1,2); f2(0,2,3); this.x = 0.000000; this.y = 0.000000; this.z = 0.000000; this.rotateX = 0.000000; this.rotateY = 0.000000; this.rotateZ = 0.000000; this.scaleX = 50.000000; this.scaleY = 50.000000; this.scaleZ = 50.000000; return (l); } } // using an edited version of Sandy3d's Color Material class ColorMaterial2 extends Material { private var m_nColor:Number; private var m_nAlpha:Number; private var m_nArray:Array; private var firstPolygonId:int = -1; /** * Creates a new ColorMaterial. * * @param p_nColor The color for this material in hexadecimal notation * @param p_nAlpha The alpha value in percent of full opacity ( 0 - 1 ) * @param p_oAttr The attributes for this material */ public function ColorMaterial2( p_nColor:uint = 0x00, p_nAlpha:Number = 1, p_oAttr:MaterialAttributes = null, p_nArray:Array = null) { super(p_oAttr); // -- m_oType = MaterialType.COLOR; // -- m_nColor = p_nColor; m_nAlpha = p_nAlpha; m_nArray = p_nArray; } /** * Renders this material on the face it dresses * * @param p_oScene The current scene * @param p_oPolygon The face to be rendered * @param p_mcContainer The container to draw on */ public override function renderPolygon( p_oScene:Scene3D, p_oPolygon:Polygon, p_mcContainer:Sprite ):void { if(firstPolygonId > p_oPolygon.id || firstPolygonId == -1){ firstPolygonId = p_oPolygon.id; //trce(firstPolygonId); } const l_points:Array = (p_oPolygon.isClipped) ? p_oPolygon.cvertices : p_oPolygon.vertices; if( !l_points.length ) return; var l_oVertex:Vertex; var lId:int = l_points.length; var l_graphics:Graphics = p_mcContainer.graphics; // -- l_graphics.lineStyle(); l_graphics.beginFill( m_nArray[p_oPolygon.id-firstPolygonId], m_nAlpha ); l_graphics.moveTo( l_points[0].sx, l_points[0].sy ); while( l_oVertex = l_points[ --lId ] ) l_graphics.lineTo( l_oVertex.sx, l_oVertex.sy ); l_graphics.endFill(); // -- if( attributes ) attributes.draw( l_graphics, p_oPolygon, this, p_oScene ) ; } /** * @private */ public function get alpha():Number { return m_nAlpha; } /** * @private */ public function get color():Number { return m_nColor; } /** * The alpha value for this material ( 0 - 1 ) * * Alpha = 0 means fully transparent, alpha = 1 fully opaque. */ public function set alpha(p_nValue:Number):void { m_nAlpha = p_nValue; m_bModified = true; } /** * The color of this material */ public function set color(p_nValue:Number):void { m_nColor = p_nValue; m_bModified = true; } } Code Fullscreen Preview Fullscreen 3d Arwing Model Sandy Shape3d setUVCoords Geometry3D id MaterialAttributes camera root GouraudAttributes setFaceVertexIds getNextFaceID Material material LightAttributes scene generate sy getNextVertexID ambient setFaceUVCoordsIds diffuse setFaceNormal sort new page view favorite forked pv0 forked from: Spaceship Model i.. hacker_techjunkinbox forked:0 favorite:0lines:472 (diff:1) pv633 forked from: Spaceship Model i.. runo forked:0 favorite:0lines:408 (diff:383)