zerO

纪念我所怀念的一切.

« zerO3D更新至v1.0.1关于zerO的一些事 »
2009-1-26 15:51:43 | 发布:linfuqing | 分类:zerO3d | 评论:2 | 引用:0 | 浏览:

zerO3D中文使用说明---基础:构建篇

 

在使用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]

  • quote 2.菠菜
  • 兄弟,怎么看起来两个面的夹角不是90°呢?
    linfuqing 于 2009-2-27 22:49:21 回复
    怎么说呢..-_-!这是一种3D上的错觉吧...
    ryan 于 2009-3-24 14:55:09 回复
    是这样的,因为摄像头的位置关系,造成的广角的拉升
  • 2009-2-27 9:50:30 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

最新评论及回复

友情链接

[Top] Powered By Z-Blog 1.8 Arwen Build 81206. Theme FormerDays Design By haphic

[-Do U rmAmb al _LEAVEs_ Missing UnderTheTree-]
All by 怀念从前.