http://abcdefgea.blog.163.com/blog/static/13278774120121155041956/

away3D_4.1.0_教程使用到的3D文件格式

.3ds(3D Studio):只能导出模型文件和灯光,无法附带模型的uv,是一种比较初级的格式。

.obj(OBJ-Importer):常用格式,支持材质和贴图,支持uvw坐标。不支持动作

MD5:Doom3中使用的3D模型文件,模型的几何数据储存在*.md5mesh文件里,动画数据存储在*.md5anim文件里。支持骨骼动画,支持顶点蒙皮,使用四元数(一种可以用来旋转定位的数学模型)来定位方向。

.md2:战锤II引擎中使用的模型。

.ac3D、.dae、.awd

1. 通常支持骨骼动画的模型有:md2、md5、3ds、awd

2. awd是away3D的专有格式,可以通过away3D的模型编辑器preFab来导出生成。

away3D_4.1.0加载3D文件,通常都能获取Mesh,根据模型不同获取额外的数据

function onAssetComplete(e:AssetEvent):void{

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

}else if(e.asset.assetType == AssetType.MATERIAL){

}else if(e.asset.assetType == AssetType.ANIMATION_SET){

}

}

http://blog.sina.com.cn/s/blog_5f48de2f0101749q.html

away3d 4.0学习

要学away3d的话要先搭建环境,

要使用away3d,可以下载away3d的swc导入到项目里面用,
也可以将away3d的源码导入到项目里面使用。
前者的好处是编译快,
后者的好处是编译花时间,下载也花时间,但是后者对于调试帮助很大,你可以熟悉away3d的所有源码,所以我选择的是第二种。
两者都可以从away3d的官网www.away3d.com的download下载到,如果要下载away3d的历史版本的话,右边有一个release的选项,里面有所有版本的away3d资源供下载。
新建一个as项目或者flex项目,配置away3d后,就可以正是开始away3d编程了。
源码如下:
package
{
import away3d.containers.View3D;
import flash.display.Sprite;
import flash.events.Event;
[SWF(frameRate=30,width=1000,height=600)]
public class Awaytest extends Sprite
{
//away3d的窗户,View3D是awy3d于flash displaylist唯一的关联类
private var _view:View3D;
public function Awaytest()
{
//是否添加到舞台,添加到舞台后开始初始化的操作
if(stage)
init();
else
addEventListener(Event.ADDED_TO_STAGE, init)
}
private function init(e:Event=null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
//初始化away3d视窗,设置背景色并添加到显示列表
_view = new View3D();
_view.backgroundColor = 0x0c0c0c;
addChild(_view)
addEventListener(Event.ENTER_FRAME, onEnter);
}
private function onEnter(e:Event):void
{
//每帧调用View3D的render方法渲染
_view.render();
trace("rendering....");
}
}
}
代码注释都在里面了。
debug运行之后如果console(控制台)有输出rendering...的话那么代表一切正常。

由于将要进行很多的例子操作,所以估计敲new View3D都要敲很多次,所以把所有例子里面公用的代码抽出来做成一个基类,顺带介绍一下AwayStats这个类,源码如下:

package template
{
import away3d.containers.View3D;
import away3d.debug.AwayStats;
import flash.display.Sprite;
import flash.events.Event;
public class AwayTemplate extends Sprite
{
protected var _view:View3D;
private var stats:AwayStats;
public function AwayTemplate()
{
if(stage)
init();
else
addEventListener(Event.ADDED_TO_STAGE, init)
}
private function init(e:Event=null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
initView();
addEventListener(Event.ENTER_FRAME, onEnter);
}
protected function initView():void
{
_view = new View3D();
_view.backgroundColor = 0x0c0c0c;
addChild(_view)
stats = new AwayStats(_view);
addChild(stats);
}
protected function render():void
{
trace("rendering....");
}
private function onEnter(e:Event):void
{
_view.render();
render();
}
}
}
上面的内容主要是:
1 把view3D的初始化过程提取出来,写成protected方法,以备子类使用;
2 在enterframe里面加了一个render方法,以备例子里面用来渲染游戏里面的某些逻辑;
3 增加了AwayStats实例,用来监控away3d的内存使用,cpu占用还有面数,这个看了下源码,似乎有单例可以使用,记得注意的是构造器里面要传View3D实例,否则的话它就会不知道要监控哪一个View3D的Poly也就是面的使用,我今天就犯了这个错误。
如果一切正常的话,debug之后得到的结果将是如下:
away3d <wbr>4.0学习(2)

之前学习away3d essential的时候做了些笔记,有一哥们不知道away3d 4.0如果画sphere,这里画一个吧。

首先away3d4.0和之前的版本不一样,away3d 4.0的显示物件分为两个部分,一个是材质Texture,另一个是Gemometry也就是几何定义,两者可以合成一个Mesh(个人理解,如有误导,实在抱歉)。
代码如下:
package samples
{
import away3d.entities.Mesh;
import away3d.materials.TextureMaterial;
import away3d.primitives.SphereGeometry;
import away3d.utils.Cast;
import template.AwayTemplate;
public class SphereTest extends AwayTemplate
{
[Embed(source="assets/earth.jpg")]
private var earth:Class;
private var sphere:Mesh;
public function SphereTest()
{
super();
}
override protected function initView():void
{
super.initView();
initSphere();
}
private function initSphere():void
{
//建立球体的几何对象
var geo:SphereGeometry = new SphereGeometry(400);
//建立球体的材质数据
var texture:TextureMaterial = new TextureMaterial(Cast.bitmapTexture(earth));
sphere = new Mesh(geo,texture);
//将物体添加到场景里面显示
_view.scene.addChild(sphere);
}
}
}
运行结果如下:
away3d <wbr>4.0学习(3)

如果你运行时出现错误说找不到图片的话,你自己应该知道是什么原因。
添加以下代码会有惊喜:
override protected function render():void
{
sphere.yaw(1);
}

嗯,最近在导出找3d模型玩,google的模型库里面倒是有蛮多的,但是天朝的网络不给力,不是墙就是下不了,并且google的模型库需要下载专门的软件,于是就没怎么研究下去了。

然后从朋友那里得来一个3d max,晚上回去无聊乱搞搞,自己瞎搞了个模型出来了,于是顺道练习了一下3ds文件在away3d中的使用。
东西简陋了点,但是由于是第一次搞,还是蛮有成就感的。
源码如下:
package
{
import away3d.containers.ObjectContainer3D;
import away3d.controllers.FirstPersonController;
import away3d.controllers.HoverController;
import away3d.controllers.LookAtController;
import away3d.events.AssetEvent;
import away3d.loaders.Loader3D;
import away3d.loaders.parsers.Max3DSParser;
import base.TemplateBase;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.geom.Vector3D;
import flash.net.URLRequest;
import flash.ui.Keyboard;
public class ModelLoaderTest extends TemplateBase
{
private var loader:Loader3D;
private var controler:HoverController;
private var step:Number=5;
private var placeHolder:ObjectContainer3D;
private var stageMouseX:Number;
private var stageMouseY:Number;
public function ModelLoaderTest()
{
super();
}
override protected function init(e:Event=null):void
{
super.init(e);
_view.camera.y = 500;
loader = new Loader3D();
Loader3D.enableParser(Max3DSParser);
loader.addEventListener(AssetEvent.ASSET_COMPLETE, onAssetComplete);
loader.load(new URLRequest("assets/houseScene.3ds"));
loader.scale(10);
_view.scene.addChild(loader);
placeHolder = new ObjectContainer3D();
placeHolder.y = 100;
placeHolder.x = - 100;
_view.camera.addChild(placeHolder);
controler = new HoverController(_view.camera);
initEvents();
}
private function initEvents():void
{
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
stage.addEventListener(MouseEvent.MOUSE_WHEEL, onWheel);
}
private function mouseDown(e:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
stage.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
stageMouseX = stage.mouseX;
stageMouseY = stage.mouseY;
}
private function onWheel(e:MouseEvent):void
{
controler.distance *= (1+e.delta/100); 
}
private function mouseUp(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUp);
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
var deltaX:Number = stage.mouseX - stageMouseX;
var deltaY:Number = stage.mouseY - stageMouseY;
controler.panAngle = 0.5*deltaX+controler.panAngle;
controler.tiltAngle = 0.5*deltaY+controler.tiltAngle;
}
private function onAssetComplete(e:AssetEvent):void
{
}
override protected function onEnter(e:Event):void
{
super.onEnter(e);
}
}
}
效果图如下:
away3d <wbr>4.0学习(4)

away3d学习笔记 转载相关推荐

  1. Away3d学习笔记(1)

    为了做一些较复杂的3D应用,打算学习下3D引擎.PV3D早已停止更新,Away3D看上去是个不错的起点,一来因为它开源免费,而且 相关的资料比较丰富.通过比较,发现推荐较多的是这本:<The E ...

  2. 阿龙的学习笔记---转载及精炼总结github仓库:cpp-backend-reference

    -> 转载自https://github.com/chankeh/cpp-backend-reference 突击复习常见题,要提前批了,之前的忘了不少,知识广度先再拓展一下.文章中的一些详细讲 ...

  3. Away3D学习笔记1 - 戏说Flash 三维引擎

    如果把文章开头比作一个入口的话,那我要在入口处立一块牌,上书:"非flash开发人员免入".因为如果把flash比作一部电影的话,本文以及本博客所有文章都是写给导演而非观众的. 万 ...

  4. Away3D学习笔记(4)

    第三章的基类 先写一个基类Chapter03SampleBase.as,位于flash3dbook.ch03包内.后面的例子都会在它的基础上扩展. 这个基类定义了三个保护成员变量:_view, _cu ...

  5. Away3d学习笔记 - away3d类库下载

    Away3d引擎就是一个Actionscript的类库,所以我们要使用它就先要下载.目前最新的版本是Version 2.3.3 / 3.3.3 点此下载 :2.3.3(flash9)         ...

  6. JBI学习笔记(转载于gaolin_bei)

    2019独角兽企业重金招聘Python工程师标准>>> 业界正在广泛寻求解决 B2B 以及 EAI (企业应用集成)所存在问题的方案.这些方案不同于基于 JMS 手段的面向消息中间件 ...

  7. HUAWEI视讯技术学习笔记(转载)

    一.平台介绍 业务管理 SMC2.0 . 网络控制 网络控制的核心--SC(switch center),是视讯业务的交换控制中心,主要有地址解析.接入控制.带宽管理.呼叫管理等功能.SC的交换控制是 ...

  8. NHibernate学习笔记(转载):many-to-one/one-to-many/many-to-many关系映射

    本文的内容: 介绍NH如何处理对象间many-to-one,one-to-many和many-to-many的双向映射关系(本文主要介绍了映射文件,对于类的生成可以跟据前两篇描述的方法生成): 经验教 ...

  9. Android 中的WiFi学习笔记(转载)----WIFI启动 代码流程走读---网络连接流程

    Android的WiFi 我们通常看到WiFi的守护进程wpa_supplicant在我们的ps的进程列表中,这个就是我们的wifi守护进程.wpa_supplicant在external/wpa_s ...

最新文章

  1. ABAP:ALV中自定义搜索帮助
  2. mongodb 搜索速度_初识 MongoDB 数据库
  3. RewriteCond 详解
  4. CentOS6下docker的安装和使用
  5. Selenium Webdriver 简易教程
  6. 新的 HTML5 文档类型和字符集是,前端面试题--HTML5+CSS3(1)
  7. 《SPSS 统计分析从入门到精通(第2版)》一6.3 二项式检验
  8. python字典长度可变吗_[python] 根据字典中的信息生成列表,每次都会额外变长。...
  9. 欧拉素数筛理解与模板
  10. 多标签分类问题中的评价指标:准确率,交叉熵代价函数
  11. html图片从左到右慢慢出来,css 实现一个div的背景颜色从左到右慢慢出现 里面文字颜色也改...
  12. 日志分析(偏linux)
  13. php上传文件失败的原因,PHP图片文件上传失败的原因
  14. [内网渗透]—权限维持
  15. 关于能连上网却打不开网页的问题
  16. LWIP协议与TCP/IP
  17. 面向对象三大特性(继承)
  18. 03.Hadoop之HDFS
  19. 如何在.config文件自定义配置节
  20. 关于实现3D立体旋转效果的轮播视图

热门文章

  1. 系统计算机如何使用记录,Win7如何查看电脑使用记录?
  2. 混凝土墙开洞_临沂市混凝土墙打孔开洞方案
  3. 二叉排序树的判别(耿8.6)
  4. 前端开发规范之项目架构
  5. 《机器学习实战》学习笔记———使用logistic回归预测患有疝病的马的存活
  6. html使用easyui单选按钮,Easyui radiobutton(单选框)_EasyUI 插件
  7. 第018课 ADC和触摸屏硬件原理详解及裸机编程
  8. 从零开始搭建一个8位计算机系列(三):利用LM555定时器构建稳定的时钟脉冲
  9. 华为OSPF配置练习
  10. 【自考】数据结构导论-第6章查找代码