在使用zerO3d之前,请先确定你懂得类的基础,如何写方法,如何实例化对象等等AS3(action script3.0)基础,如果你对AS3还不太了解.那么也没关系.读读以下三本书的任何一本也许都会对你有很大的帮助:
1.<<Action Script3殿堂之路>> ---中国人写的,不用担心任何翻译问题,一本理论性很强的书
2.<<Flash ActionScript3.0 动画教程>> ---<<Foundation ActionScript 3 Animation:Making Things Move!>>中文版
3.<<ActionScript 3.0 Cookbook>> ---可以像手册那样使用
我敢打保票,如果你读过第二本书,那么你使用zerO3d将会轻松无比,因为zerO3d是从<<Making Things Move>>获得灵感,因此很多类结构上都与书里介绍的极其相似.
好吧,从现在开始,我假定你已经有了一定的AS3基础,我们开始zerO3d的第一步:
要使用zerO3d,你的程序中必须要包含三个类(或其子类):Viewport3D(视口), Scene3D(场景), RenderEngine(渲染器).
____________________场景(Scene3D)________________
场景顾名思义,开始时候它里面什么都没有,你必须将你的所有模型加到里面,比如说你定义一个Cube(立方体),像这样:
var scene:Scene3D = new Scene3D();
var cube:Cube = new Cube();
scene.add( cube );
____________________视口(Viewport3D)______________
它作为一个对场景的映射,可以把场景上的东西投影到上面形成2D图像.抱歉,这样说比较抽象,你可以把它想象成一扇窗户,透过窗户你可以看到窗外的世界.或者是一张幕布,影片机的光打在上面我们才可以看到一场华美的电影.
定义一个Viewport3D需要三个变量,分别是width(视口宽),height(视口高).
我们通常把舞台的宽高传进去,然后加入显示清单(如果不加入,你将看不到任何东西),像这样:
var viewport:Viewport3D = new Viewport3D( stage.stageWidth,stage.stageHeight,focus ); //focus是一个Number值,是你眼睛到电脑屏幕的距离.一般不用填,你也可以尝试不同focus生成不一样的效果
addChild( viewport ); //假设你的类是一个精灵
然后再影射你的场景:
viewport.projectScene( scene );
这里需要说明一下.影射场景请在你把你所有的东西加入场景之后.影射之后再加入的几何体是显示不出来的.
____________________渲染器(RenderEngine)____________
假定你已经创建了你的场景和视口,然后你想在你屏幕上看到它(更确切地说是看到它表面的纹理),那么你必须渲染它.渲染的时候必须加在桢里,前提你必须先定义一个RenderEngine,这里需要声明一下,RenderEngine是一个伪类,不能直接使用,必须使用它的子类,这里采用Zsort,Zsort的参数是你想渲染的视口,像这样:
var render:RenderEngine = new Zsort( viewport );
addEventListener( Event.ENTER_FRAME,onEnterFrame );
好,然后在onEnterFrame里加入这一行:
render.render();
可能上面说的有点乱,下面我们把以上我们讲的整合成我们的第一个zerO3d项目
_________________Hello World______________________
package
{
import flash.display.Sprite;
import flash.events.Event;
import zerO.geom.primitives.Cube;
import zerO.render.RenderEngine;
import zerO.render.Zsort;
import zerO.scenes.Scene3D;
import zerO.veiw.Viewport3D;
public class HelloWorld extends Sprite
{
//定义新的场景:
private var scene:Scene3D = new Scene3D();
//定义一个正方体:
private var cube:Cube = new Cube();
//定义一个视口:
private var viewport:Viewport3D = new Viewport3D( stage.stageWidth,stage.stageHeight );
//定义一个渲染器:
private var render:RenderEngine = new Zsort( viewport );
/**
* zerO3d's hello world!
*/
public function HelloWorld()
{
zerO3d();
}
public function zerO3d():void
{
//将矩形加入场景
scene.add( cube );
//将视口加入显示清单
addChild( viewport );
//影射场景
viewport.projectScene( scene );
addEventListener( Event.ENTER_FRAME,onEnterFrame );
}
private function onEnterFrame( event:Event ):void
{
//渲染器渲染
render.render();
//让正方体绕Y轴旋转
cube.rotationY += 1;
}
}
}
_______________zerO3d________________
下面是效果:
呵呵,是不是很简单?
我做了4个基本模型,分别是Cube,Cylinder,Pyramid,WordA3D.
你可以尝试各种不同的效果组合,做出更绚丽的效果.
[构建篇 End]