本帖隐藏的内容设置视图和渲染
当构建一个新的3D应用程序,首先要做的操作是创建View,它作为一扇窗户,透过它能看到3D世界。(顶级容器) 在最简单的情况下,您可以创建一个View3D的实例,并将它添加到显示列表。 添加以下五行代码到构造函数:
_view = new View3D();_view.backgroundColor = 0x666666; //设置视图的背景颜色_view.antiAlias = 4; //设置视图 抗锯齿的数量(设置的越高,平滑度越高,但是会影响性能)this.addChild(_view); //将视图添加到舞台上this.addEventListener(Event.ENTER_FRAME, onEnterFrame); //监听帧动画走动
复制代码
构造函数现在应该是这样了:
public function GettingStartedWithAway3D(){ _view = new View3D(); _view.backgroundColor = 0x666666; _view.antiAlias = 4; this.addChild(_view); this.addEventListener(Event.ENTER_FRAME, onEnterFrame);}
复制代码
当启用了antiAlias设置它的值2,4,或16 您指定硬件渲染器将通过使用一些边缘平滑,渲染每个像素。通常设置为4.
backgroundColor 可以定义View3D的背景色.
ENTER_FRAME监听器,监听动画的每一帧。 前面的代码示例包含一个ENTER_FRAME侦听器,所以你必须添加适当的监听器函数,比如这个:
private function onEnterFrame(ev : Event) : void{ _view.render();}
复制代码
这个函数 View3D的render()方法被调用到每一帧,这样可以在每一帧动画中去重绘view3D。
这就是基本的样板化代码用于大多数3D项目。您可以运行代码,可是现在的应用程序仅显示一个灰色的长方形。实际上,你看到的是空视图的背景颜色。
加载模型
Away3D 4加载外部资源的过程简单,并且极为万能。以后的教程中,我会对这一系统做更详细介绍。最简单的使用方法是,创建一个Loader3D类的实例,将其放进scene(场景),启动加载即可。这个过程类似于你原先使用flash.display.Loader类加载2D资源的方式。不过,你最好侦听相关事件,并在将loader添加到场景之前,检测加载是否成功。 向构造器添加下面5行。敲代码时,确保已经导入away3d.loaders.parsers.Parsers, away3d.events.LoaderEvent和flash.net.URLRequest。
Parsers.enableAllBundled(); _loader = new Loader3D();_loader.addEventListener(LoaderEvent.RESOURCE_COMPLETE, onResourceComplete);_loader.addEventListener(LoaderEvent.LOAD_ERROR, onLoadError);_loader.load( new URLRequest(‘vase.awd’));
复制代码
构造器应该像这样:
public function GettingStartedWithAway3D(){ _view = new View3D();_view.backgroundColor = 0x666666;_view.antiAlias = 4;this.addChild(_view); this.addEventListener(Event.ENTER_FRAME, onEnterFrame); Parsers.enableAllBundled();_loader = new Loader3D(); _loader.addEventListener(LoaderEvent.RESOURCE_COMPLETE, onResourceComplete); _loader.addEventListener(LoaderEvent.LOAD_ERROR, onLoadError);_loader.load( new URLRequest(‘vase.awd’) );}
复制代码
第一行会激活所有绑定的解析器。这是最简单的方法,因为你不用担心文件格式,但可能给你的SWF文件增加不必要的体积。 被指定为解析器的类负责将存储格式(像比OBJ 3D模型或JPEG图像)转化为引擎在运行时能够调用的格式。Away3D的解析器使用插件式的架构,也就允许你只嵌入项目需要的那部分,或者自己编写。并且,,这些解析器能够自动侦测文件格式,这意味着你不必预知要加载的文件类型。这和flash原生的Loader类使用方法相似,看起来并无新奇之处,但要知道,许多3D引擎(包括Away3D的早期版本)在加载不同文件格式时,使用的加载方式不尽相同。 上面代码接下来的4行,创建了一个Loader3D的实例,为预期的success和failure事件添加侦听,并且开始加载一个名为vase.awd的资源。
下面的函数演示了如何处理加载错误。向你的类添加下面7行:
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;}
复制代码
上面的代码使用trace语句将错误信息显示到输出面板并处理loader。为了是垃圾回收机制将loader从内存中清除,需要卸载所有的侦听。类似的,下面是success对应的处理函数:
人言未必皆真,听言只听三分。