Away 3 D基礎教程(二):外部モデルのロード

10436 ワード

プレビューアドレス:http://leoas.host-home-idc.k5.fhfinance.com/tutorials/2/glass.html
モデルはマウスに従って回転し、中ボタンホイールはスケーリングされます.
モデルと完全なソースのダウンロード:http://files.cnblogs.com/njflash/src2.rar
プレビュー画像:
Away3D基础教程(二):加载外部模型
away 3 dがサポートするモデルのフォーマットは豊富です.MD 2、MD 5、3 DS、OBJなど私たちがよく使うフォーマットは全部サポートします.その他にaway 3 dの専用フォーマットawdがあります.awdは、away 3 dのモデルエディタpreFabによって生成を導出することができる.通常骨格動画をサポートするモデルはMD 2 MD 5 3 DS AWDなどがあります.ここではAWDモデルをロードします.
1:まず3 Dビューを作成し、ビューの関連パラメータを設定します.
_view = new View3D();

//   

_view.backgroundColor = 0x666666;

//     

_view.antiAlias = 4;

this.addChild(_view);
2:レンダリングリスタとマウスホイールリスニングを初期化する
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);

stage.addEventListener(MouseEvent.MOUSE_WHEEL,onWheel);
3:Loader 3 Dクラスでモデルをロードして解析する
//Parsers.enableAllBundled()  away3d              

Parsers.enableAllBundled();

            

_loader = new Loader3D();

_loader.addEventListener(LoaderEvent.RESOURCE_COMPLETE,onResourceComplete);

//_loader.addEventListener(AssetEvent.ASSET_COMPLETE,assetComplete);

_loader.addEventListener(LoaderEvent.LOAD_ERROR, onLoadError);

//AntModel          

_loader.loadData(new AntModel());
4:ロード完了後のイベント処理関数
_loader.removeEventListener(LoaderEvent.RESOURCE_COMPLETE,onResourceComplete);

_loader.removeEventListener(LoaderEvent.LOAD_ERROR, onLoadError);

_view.scene.addChild(_loader);

_view.camera.z=1000;

_view.camera.lookAt(_loader.position);
5:ソースコードの整合性
package

{

    import away3d.containers.View3D;

    import away3d.entities.Mesh;

    import away3d.events.AssetEvent;

    import away3d.events.LoaderEvent;

    import away3d.loaders.Loader3D;

    import away3d.loaders.misc.*;

    import away3d.loaders.parsers.Parsers;

    import away3d.library.assets.AssetType;

    

    import flash.display.Sprite;

    import flash.events.Event;

    import flash.net.URLRequest;

    import flash.events.MouseEvent;

    

    [SWF(width="550", height="400", frameRate="60", backgroundColor="0x666666")]

    public class GettingStartedWithAway3D extends Sprite

    {

        [Embed(source="vase.awd",mimeType="application/octet-stream")]

        public static var AntModel:Class;

        

        private var _view : View3D;

        private var _loader : Loader3D;

        

        public function GettingStartedWithAway3D()

        {

            _view = new View3D();

            //   

            _view.backgroundColor = 0x666666;

            //     

            _view.antiAlias = 4;

            this.addChild(_view);

            

            this.addEventListener(Event.ENTER_FRAME, onEnterFrame);

            stage.addEventListener(MouseEvent.MOUSE_WHEEL,onWheel);

            

            //Parsers.enableAllBundled()  away3d              

            Parsers.enableAllBundled();

            

            _loader = new Loader3D();

            _loader.addEventListener(LoaderEvent.RESOURCE_COMPLETE, onResourceComplete);

            /*                 Mesh      ,        MESH,

                                      */

            //_loader.addEventListener(AssetEvent.ASSET_COMPLETE, assetComplete);

            _loader.addEventListener(LoaderEvent.LOAD_ERROR, onLoadError);

            //AntModel          

            _loader.loadData(new AntModel());

        }

        

        /*private function assetComplete(e:AssetEvent):void {

            //trace(e.asset.assetType == AssetType.MESH);

            if (e.asset.assetType == AssetType.MESH) {

                var mesh3d:Mesh = e.asset as Mesh;

                _view.scene.addChild(mesh3d);    

            }

        }*/

        

        

        private function onResourceComplete(ev : LoaderEvent) : void

        {

            _loader.removeEventListener(LoaderEvent.RESOURCE_COMPLETE, onResourceComplete);

            _loader.removeEventListener(LoaderEvent.LOAD_ERROR, onLoadError);

            _view.scene.addChild(_loader);

            _view.camera.z=1000;

            _view.camera.lookAt(_loader.position);

        }

        

        

        private function onLoadError(ev : LoaderEvent) : void

        {

            trace('Could not find', ev.url);

            _loader.removeEventListener(LoaderEvent.RESOURCE_COMPLETE, onResourceComplete);

            _loader.removeEventListener(LoaderEvent.LOAD_ERROR, onLoadError);

            _loader = null;

        }

        

        private function onWheel(e:MouseEvent):void{

            trace(e.delta);

            if(e.delta>0){

                _view.camera.moveForward(30);

            }else{

                _view.camera.moveBackward(30);

            }

        }

        

        private function onEnterFrame(ev : Event) : void

        {

            _loader.rotationY = stage.mouseX - stage.stageWidth/2;

            _view.camera.y = 3 * (stage.mouseY - stage.stageHeight/2);

            _view.camera.lookAt(_loader.position);

            

            _view.render();

        }

    }

}