Away3D基础教程(二):加载外部模型
2013-02-02 14:01
323 查看
预览地址: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视口,设置视口的相关参数
2:初始化渲染侦听器和鼠标滚轮侦听
3:用Loader3D类来加载和解析模型
4:加载完成后的事件处理函数
5:完整源码
模型随鼠标转动,中键滚轮缩放。
模型和完整源码下载: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();
}
}
}
相关文章推荐
- Away3D基础教程(四):获取载入模型的每个面,并进行鼠标交互
- away3d 4.0学习(4)加载简单的外部模型
- OpenGL 入门基础教程 —— 加载obj模型
- Three.js加载外部模型的教程详解
- away3d 4.0.9Gold 学习笔记 加载模型(6)
- NeHe OpenGL教程 第三十一课:加载模型
- DIV+CSS基础教程:盒模型、块状元素与内联元素、CSS选择器
- JAVA基础教程:类加载和初始化顺序
- Objective-C基础教程学习笔记(十五)文件加载与保存
- [李景山php]每天laravel[018]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---准备关系模型
- 【连载】【黑金动力社区原创力作】《液晶驱动与GUI 基础教程》 --第二章 颜色模型(三)
- Libgdx New 3D API 教程之 -- 使用Libgdx加载模型
- 【javascript基础】【转】各浏览器对页面外部资源加载的策略
- JME基础教程代码分析9 碰撞、刚体、场景加载
- Java自学之路-Java基础教程-36:Java的数据库连接操作以及外部jar包导入
- LPC基础教程-Lpc程序和编程环境 mudos 加载原理
- 3dmax入门教程(三) 初步认识创建面版、基础模型创建 建模
- 使用Weka进行数据挖掘(Weka教程九)模型序列化/持久化存储和加载
- away3d 4.1 alpha 教程 模型篇 <1> Max中的制作带有骨骼动作的模型
- Away3D 学习笔记(一): 加载3DS格式的模型文件