为了做一些较复杂的3D应用,打算学习下3D引擎。PV3D早已停止更新,Away3D看上去是个不错的起点,一来因为它开源免费,而且 相关的资料比较丰富。通过比较,发现推荐较多的是这本:《The Essential Guide to 3D In Flash》。
第一章是基础知识,如何下载源代码,如何建立工程文件。可以大概扫一眼,比较有趣的是最后一种方式,使用make和Flex SDK进行开发, 学习曲线最陡峭,但也最灵活。下面是MAKE文件的一个写法样例
MXMLC=/cygdrive/d/flex/bin/mxmlc
SRC=src lib-src
APP=src/HelloWorld.as
OUT=out/helloWorld.swf
ARGS=-sp $(SRC) -o $(OUT) -use-network=false
all:
$(MXMLC) $(ARGS) -file-specs $(APP)
第二章包括一些简单的例子,通过敲打这些demo,可以摸索出away3d的些许脾气和秉性。
最简单的away3d文件中,只存在一个View3D(视窗)对象。View3D直接继承自Sprite,可以在显示列表上进行添加删除 操作。它的render()函数,用来渲染其中的三维场景。常规的做法是在EnterFrame侦听函数中调用render函数,以实现逐帧刷新。 另外,View3D的位置除了代表视窗位置之外,还指定了灭点(vanishing point)的方位。
往三维空间里面添加物体十分方便。Away3D最大程度上沿用了Flash原生API规范,能减少生词数量。三维空间的根节点是scene(场景), 属于Scene3D类。添加删除子元素的函数分别是:addChild(), removeChild()。
另外一个好消息是,当创建了View3D对象后,Away3D会免费赠送一个Scene3D对象。放在View3D的scene属性里。这个贴心的设计,体现了 设计者无微不至的关怀。
Cube类,作为最简单的三维模型之一,它的创建相当简单:
var cube:Cube = new Cube();
默认的材质是WireColorMaterial,很朴素的材质。如果你想让它色彩丰富,可以试试BitmapMaterial 材质:
var bmp:BitmapData = new BitmapData(200, 200);
bmp.perlinNoise(200, 200, 2, Math.random(), true, true);
var mat:BitmapMaterial = new BitmapMaterial(bmp);
var cube:Cube = new Cube({material:mat});