Away3D基础教程(二):加载外部模型[通俗易懂]

Away3D基础教程(二):加载外部模型[通俗易懂]预览地址:http://leoas.host-home-idc.k5.fhfinance.com/tutorials/2/glass.html模型随鼠标转动,中键滚轮缩放。模型和完整源码下载:http

大家好,又见面了,我是你们的朋友全栈君。

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

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

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

预览图片:

Away3D基础教程(二):加载外部模型[通俗易懂]

  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://javaforall.net/155212.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月2日 下午4:00
下一篇 2022年7月2日 下午4:16


相关推荐

  • postman发送json数据请求(java用post发json数据)

    java发送post请求。在开发中我们经常遇到从一个服务器中向另外一个服务器的发送数据数据,他们走的基本上都是api,对于一般的增加、修改、删除都是post请求。下面的例子就是java使用HttpCilent发送一个post请求,参数形式是json格式。具体代码见[url]http://www.exceptionhelp.com/javadetail?articleId=582[/u…

    2022年4月14日
    40
  • 淘宝店铺优化_手机淘宝怎么分享链接

    淘宝店铺优化_手机淘宝怎么分享链接前言为了满足不同用户的多样性购物需求,过去两年里手机淘宝的业务不断膨胀,已经从单一的购物工具成为了购物内容平台。在业务快速增长的同时,也带来一些副作用,很多操作环节和页面因为承载功能太多,展示速度变慢

    2022年8月3日
    7
  • 爬虫(2)之re 爬取淘宝网「建议收藏」

    爬虫(2)之re 爬取淘宝网「建议收藏」我们通过requests可以很轻松地就获得网页上的所有内容,但是这些内容往往会夹杂着许多我们不需要的东西,因此我们需要解析和提取HTML数据。在先前介绍过的解析和提取html内容的库,只能够处理静态文本执行简单的搜索,缺乏灵活性,不能处理动态的文本信息。下面来介绍一下正则表达式。什么是正则表达式?正则表达式是用来简洁表达一组字符串的表达式正则表达式是一种通用的字符串表达框架正则表…

    2022年6月18日
    35
  • 思科路由器配置命令(详细命令总结归纳)

    思科路由器配置命令(详细命令总结归纳)目录前言一 路由器介绍二 路由器配置 1 常用命令 2 配置永不超时 防止长时间无操作返回初始界面 3 防止配置命令被打断 启用显示同步 4 禁用 DNS 查找 5 配置 arp6 静态路由 默认路由 7 telenet 远程登录设置 8 配置 DHCP 服务 9 配置标准 acl10 配置标准命名和扩展命名 ACL 1 创建扩展 ACL 2 创建扩展命名 ACL 3 删除已建立的命名 acl11 NAT 转换 1 静态 NAT 配置 2 动态 NAT 配置 3 网络地址

    2026年3月20日
    1
  • PreferenceActivity类

    PreferenceActivity类PreferencesA 是 Android 中专门用来实现程序设置界面及参数存储的一个 Activity 我们用一个实例来简介如何使用 PreferencesA 下面是一个设置页面 nbsp 以此为例我们来介绍一下如何实现这个界面 首先建立一个 xml 来描述这个界面 文件为 res xml preferences xmlxmlns android http

    2026年3月26日
    3
  • Linux用netstat查看服务及监听端口详解

    Linux用netstat查看服务及监听端口详解在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询netstat命令各个参数说明如下:-a或–all显示所有连线中的Socket。-A<网络类型>或–…

    2022年7月23日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号