Tuesday, 11 February 2014

Adding 3d model --> Away3D

Loading a 3D mesh made with the 3d software of your preference in as3 with away3d libraries using AssetLibrary (inside away3d.library package) you can use loader3d as well (inside away3d.loaders package).There's a parser class for some 3d file format as AC3DParser, AWD1Parser, DAEParser, OBJParser,between others, see parsers for more file formats availables.

code:

package code {
   
 import away3d.cameras.Camera3D;
 import away3d.containers.View3D;
 import away3d.events.LoaderEvent;
 import away3d.utils.*;
 import away3d.library.*;
 import away3d.library.assets.*;
 import away3d.events.AssetEvent;
 import away3d.loaders.misc.AssetLoaderContext;
 import away3d.loaders.parsers.*;
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.display.StageAlign;
 import flash.display.StageScaleMode;
 import flash.net.URLRequest;
 import away3d.entities.Mesh;
 import away3d.textures.BitmapTexture;
 import away3d.materials.TextureMaterial;
 import away3d.tools.utils.Bounds;
 import away3d.tools.helpers.MeshHelper;
 import flash.display.BitmapData;

 [SWF(width="1000", height="600", frameRate="60", backgroundColor="#000000")]
   
    public class model extends Sprite {
        private var _view:View3D;
        private const WIDTH:Number = 1000;
        private const HEIGHT:Number= 600;
        private var sphere : Mesh;
        private var txture : BitmapTexture = new BitmapTexture(new BitmapData(512, 512, false, 0xCC0000));
        private var sphereMaterial : TextureMaterial;
       
       public function model() {
            // constructor code
            super();
           if (stage) initialize();
            else addEventListener(Event.ADDED_TO_STAGE, initialize);
        }
       
         private function initialize(evt:Event = null):void
        {
          removeEventListener( Event.ADDED_TO_STAGE, initialize );
            turnon();
        }
       
        private function turnon():void{
            initStage();
            initEngine();
            setUp3DModel();
            addEventListener( Event.ENTER_FRAME, enterframeHandler );
        }
        private function initStage():void {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            stage.frameRate = 60;
           
           
        }
        private function initEngine():void
        {
            _view = new View3D();
            _view.backgroundColor = 0x333333;
            _view.width = WIDTH;
            _view.height = HEIGHT;
            _view.antiAlias = 4;
            _view.camera.lens.far = 15000;
            _view.addSourceURL( "srcview/index.html" );
            _view.forceMouseMove = true;
            _view.camera.x=-5000.76;
            _view.camera.y = -700;
            _view.camera.z =-10026.991;
            _view.camera.rotationX=4.5 ;
           
            addChild( _view );
           
        }
       
        private function enterframeHandler( event:Event ):void {
            update();
        }
        private function update():void {
            _view.render();
        }
        private function setUp3DModel():void{
          //With AssetLibrary

            AssetLibrary.enableParser(Max3DSParser);/*See for the rest of parsers http://away3d.com/livedocs/away3d/4.0/away3d/loaders/parsers/package-detail.html*/
            AssetLibrary.addEventListener(AssetEvent.ASSET_COMPLETE, onAssetComplete);
            AssetLibrary.load(new URLRequest("embeds/Sphere.3ds"),new AssetLoaderContext(false));
           
         // With Loader3D

           var loader3d:Loader3D = new Loader3D(false);
           var context:AssetLoaderContext = new AssetLoaderContext(false);
            loader3d.addEventListener(AssetEvent.ASSET_COMPLETE, onAssetComplete, false, 0, true);
            loader3d.addEventListener(LoaderEvent.RESOURCE_COMPLETE, onResourceComplete, false, 0, true);
            loader3d.load(new URLRequest("embeds/Sphere.3ds"),context, null, new Max3DSParser());

        }
        private function onAssetComplete(event:AssetEvent):void
        {
            if (event.asset.assetType == AssetType.MESH) {
                sphere = event.asset as Mesh;
                sphereMaterial = new TextureMaterial(txture);
                sphere.material = sphereMaterial;
                           
                _view.scene.addChild(sphere);
                sphere.x= -5000;
                sphere.y=-800;
                sphere.z=-9000
                sphere.scale(6);
               
                //To obtain bounds of the 3d file
                Bounds.getMeshBounds(sphere);//Retrieve object bounds
                var depth:Number = Bounds.depth;
                var width:Number = Bounds.width;
                var height:Number = Bounds.height;
                trace("depth "+depth +" width "+width+" height "+height);
            }
         
        }
    
    }
   
}
       

No comments:

Post a Comment

Note: only a member of this blog may post a comment.