Away3D基础教程(二):加载外部模型

预览地址:http://leoas.host-home-idc.k5.fhfinance.com/tutorials/2/glass.html

模型随鼠标转动,中键滚轮缩放。

模型和完整源码下载:http://files.cnblogs.com/njflash/src2.rar

预览图片:

  away3d支持的模型格式较为丰富。MD2,MD5,3DS,OBJ等我们常用的格式都支持。另外还有away3d的专有格式awd。awd可以通过away3d 的模型编辑器preFab来导出生成。通常支持骨骼动画的模型有MD2 MD5 3DS AWD 等。这里我们将加载一个AWD模型。

1:首先创建3D视口,设置视口的相关参数

_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:用Loader3D类来加载和解析模型

//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();
        }
    }
}

 

 

转载于:https://www.cnblogs.com/njflash/archive/2013/02/02/2889978.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Away3D傻瓜系列教程(3)》是一本与Away3D技术相关的教程书籍,旨在以简明易懂的方式向读者介绍Away3D引擎的基本概念和使用方法。 该教程第三部分主要涵盖了一些高级主题,帮助读者深入了解Away3D的强大功能和应用。首先,教程介绍了顶点动画的概念和实现方法,通过示例代码演示了如何在3D场景中创建逼真的动画效果。然后,教程介绍了光照和阴影的原理与实现,帮助读者了解如何在场景中模拟真实的光照效果,并创建逼真的阴影效果。 教程的下一部分涵盖了粒子系统的使用方法。它详细介绍了如何使用Away3D的粒子系统功能创建各种各样的粒子效果,例如烟雾、火焰和爆炸效果。通过学习这一部分, 读者将能够使用粒子系统为3D场景增添更加生动和逼真的效果。 此外,教程还介绍了相机控制和用户交互的方法。通过学习这些内容,读者将能够掌握如何自由控制相机的位置和视角,以及如何通过鼠标和键盘与场景进行交互。 《Away3D傻瓜系列教程(3)》对于想要深入学习Away3D技术的读者来说是一本很有价值的教程书籍。它通过简单明了的讲解和丰富的示例代码,帮助读者逐步掌握和应用Away3D引擎的核心功能,从而能够创建出令人印象深刻的3D场景和动画效果。无论是新手还是有一定经验的开发者,都可以通过这本教程书籍获得宝贵的学习经验和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值