第四章

第四章

关于primitives里的一些基本类型的创建

参数都是Object类型

其实object里面的每一项都是该类型的属性

{z:200,radius:300}   z radius都是该类的属性 所以可以这样写 其他的一样

 

 

 

 

yUp 属性

yUptrue表示该对象的法线为 Y轴,为false表示该对象的法线为Z

 

bothsides属性

 他是Mesh的属性 而primitives都是它的子类

plane.bothsides = true;表示双面显示

 

 

线框类型的3d对象

Away3d中只显示线框的基本模型类 就是在一般基本模型类前加上 Wire前缀

比如Plane的线框类就是:

WirePlane  用法和Plane一样

 

var plane : WirePlane = new WirePlane();

plane.yUp = false;

plane.x = -200;

plane.width = 200;

plane.height = 200;

plane.material = mat;

plane. pushback=true //是否使用距离camera最远的点(Z-sorting),目的是使材质始终在plane中不变化(即不进行culling)  false的话材质显示的范围经常变化,因为进行了culling  pushbacktrue时可以解决破面情况<应用例子第四章tutorial : TV BOX 和屏幕Plane的应用就用到了该属性 假如不设为true 贴图就有可能跑到TVBox 的网格上面去该属性设为true就使贴图限制在plane > 

_view.scene.addChild(plane);

 

var cube : WireCube = new WireCube();

cube.x = 200;

cube.width = 200;

cube.height = 200;

cube.depth = 200;

cube.material = mat;

_view.scene.addChild(cube);

Cube的创建的材质看帮助文档

 

 

var sphere : WireSphere = new WireSphere();

sphere.radius = 50;

sphere.segmentsW = 24;

sphere.segmentsH = 12;

sphere.material = mat;

_view.scene.addChild(sphere);

 

 

 

 

 

 

 

 

 

自定义多边面 类RegularPolygon

 

RegularPolygon用于创建指定边数的面

用法:

var polygon : RegularPolygon;

polygon = new RegularPolygon();

polygon.sides = 8;//边数

polygon.material = new ColorMaterial(0x336699);

polygon.x = 250

polygon.yUp = false;

polygon.bothsides = true;

_view.scene.addChild(polygon);

 

用该类创建的4条边即是Plane   但是该类创建的plane是绕法线旋转了45度的plane

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

外部模型的使用

 

加载的步骤:

1. Create a loader object.

2. Create a parser object.

3. Link the parser object to the loader object.

4. Set up event listeners on the loader object.

5. Define the file path of the object to be loaded and commence loading.

 

Flash的加载

var loader : Loader = new Loader();

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onComplete);

loader.load(new URLRequest('image.jpg'))

addChild(loader);

flash中不管image是否已经将加载完成 loader都被添加进显示列表中  away3d也是一样:

 

 

 

Away3d外部模型加载

//var loader : Loader3D = new Loader3D();

var loader : LoaderCube;= new LoaderCube; ();//LoaderCube是专门用来加载3d

loader.addEventListener(Loader3DEvent.LOAD_SUCCESS, _onSuccess);

loader.loadGeometry("model.3ds", new Max3DS());//Max3DS是分析器,new Max3DS表示加载的3d模型是.3ds类型 它告诉引擎用MaxDS去解析模型

scene.addChild(loader);

LoaderCube还有一个好处就是当加载的文件不存在时会给出一个错误信息!!因此我们不需要侦听流错误

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

外部资源的优化

主要是由于外部资源太大需要将其转化为AS类 进行加载

 

用了一个转换类AS3Exporter该类在away3d.exporters

 

var exporter:AS3Exporter = new AS3Exporter();

exporter.addEventListener(ExporterEvent.COMPLETE, _onComplete);

exporter.export(_loader.handle, 'MonkeyMesh', 'flash3dbook.common');//

//LoaderCube.handle表示LoaderCube中的3d模型  'MonkeyMesh'是类名flash3dbook.commo是包名

 

protected function _onComplete(ev : ExporterEvent) : void

{

trace('Export completed!');

System.setClipboard(ev.data)//as类复制到剪切板  在直接复制到记事本中即可

}

 

在实际项目中你可以动态加载该类,将该类转化为swf文件

 

 

注意所有的模型已经基本类型都是Mesh的子类 下面是加载含有模型的SWF

 

var loader : Loader = new Loader();

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onComplete);

loader.load(new URLRequest('assets.swf'));

private function _onComplete(ev : Event):void

{

var MClass : Class;

MClass = getDefinitionByName('flash3dbook.common.MonkeyMesh') as Class;、、// getDefinitionByName为全局函数

var monkeyMesh : Mesh = new MClass();

_view.scene.addChild(monkeyMesh);

 

 

3d对象使用位图滤镜

 

Away3d中使用滤镜和在flash使用一样:

 

var cube : Cube = new Cube();

cube.material = new ColorMaterial(0xcccccc);

cube.filters = [ new GlowFilter(0) ];

cube.ownCanvas = true;

_view.scene.addChild(cube);

 

ownCanvas属性说明:

cube.ownCanvas = true;//cube进行独立的渲染 cube外部就像已经封装!一般在排序时用到,排序时是对每一个对象进行单独的渲染的  ownCanvas可以理解为pv3d里的层ViewportLayer

 

 

 

 

 

 

 

Sprite3d 的使用  Sprite3daway3d.sprites包中

Sprite3d的创建

 

var sprite : Sprite3D = new Sprite3D(material);//创建Sprite3d materialMaterial类型

 

一般我们为了创建比较好看的效果比如烟雾!都需要对材质进行滤镜处理 :

//使用滤镜效果

var puff : Shape = new Shape();

var dia : Number = Math.random() * 40 + 30;

puff.graphics.beginFill(0xcccccc, Math.random());

puff.graphics.drawEllipse(-dia/2, -dia/2, dia, dia);

var bmp : BitmapData = new BitmapData(100, 100, true, 0);

bmp.draw(puff, new Matrix(1, 0, 0, 1, 50, 50));

var blur : BlurFilter = new BlurFilter(32, 32, 2);

bmp.applyFilter(bmp, bmp.rect, new Point, blur);

material = new BitmapMaterial (bmp);

 

 

 

 

 

 

 

MovieClipSprite的使用  也是在away3d.sprites包中

 

 

 

var mc:MovieClip= new Movie() as MovieClip

 

var movieSprite:MovieClipSprite= new MovieClipSprite(mc);

_view.scene.addSprite(movieSprite);

 

MovieClipSprite对象始终望着camera(away3d.sprites包里的对象都是始终望着camera)   MovieClipSprite相当于pv3d中的plane贴上MovieMaterial材质

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值