4 如何显示PV3D中的3D物体

来源:互联网 发布:梦100日日树涉数据 编辑:程序博客网 时间:2024/05/23 11:46

如何显示PV3D中的3D物体

在PV3D中有四大核心类,分别是:

Ø        Scene3D场景类。所有3D物体的容器,要想在Flash中显示,就必须将3D物体添加到场景中。

Ø        Viewport3D窗口类。它规定了摄像机能拍摄的范围,超出这个范围的3D物体将不会显示。同时摄像机将拍摄的物体映射到窗口中。

Ø        Camera3D摄像机类。拍摄场景中的3D物体。

Ø        BasicRenderEngine基本渲染引擎类。将摄像机拍摄的物体显示在窗口中。

要在Flash中显示3D物体,就要使用这四个类。

我们主要关注一下Viewport3D类,它保存引擎将3D场景中的三维图像映射到Flash的二维平面的图像。相当于我们的显示器,我们经常看到3D游戏画面是三维的,但显示器是平面的,3D引擎的作用就是产生这个视觉效果。

也就是说场景中的3D物体将会被映射到窗口中。

下面为创建窗口代码:

Viewport3D(vidth, height, resize, false);

Ø        创建窗口有4个参数,前2个位指定窗口大小,为0时,默认为整个stage尺寸。

Ø        第3个参数为窗口大小改变时是否会重绘。

Ø        最后1个参数指示是否相应鼠标事件。

为了清楚的了解PV3D中的对象是如何在Flash中显示的,我们来看一段代码。

代码清单1

package{       import flash.display.Sprite;       import flash.events.Event;       import org.papervision3d.cameras.Camera3D;       import org.papervision3d.materials.WireframeMaterial;       import org.papervision3d.objects.primitives.Sphere;       import org.papervision3d.render.BasicRenderEngine;       import org.papervision3d.scenes.Scene3D;       import org.papervision3d.view.Viewport3D;            import flash.display.StageAlign;       import flash.display.StageScaleMode;       /**        * ...        * @author yl        */       [SWF(width="640",height="480",backgroundColor="#FFFFFF")]       public class Main extends Sprite       {              private var sphere:Sphere//定义一个球体                          //定义四大核心类              private var scene:Scene3D;              private var viewport:Viewport3D;              private var camera:Camera3D;              private var render:BasicRenderEngine;              public function Main():void              {                     if(stage) init();                     else addEventListener(Event.ADDED_TO_STAGE, init);              }                          private function init(e:Event = null):void              {                     removeEventListener(Event.ADDED_TO_STAGE,init);                     //entry point                     stage.scaleMode= StageScaleMode.NO_SCALE;                     stage.align= StageAlign.TOP_LEFT;                     scene= new Scene3D();                     viewport= new Viewport3D(640, 480);                     camera= new Camera3D();                     render= new BasicRenderEngine();                     sphere= new Sphere(null, 320, 12, 8);                     //将生成的球体加载进场景,以便摄像机能拍摄到                     scene.addChild(sphere);                                     //由于PV3D中的物体都被映射到窗口,因此只需要将窗口加载进文档类即可                     addChild(viewport);                     //将摄像机拍摄到场景中的物体映射到窗口中                     render.renderScene(scene,camera, viewport);              }       }}


运行效果如下。


下面我们通过一幅图来了解PV3D中的3D物体是如何在Flash舞台显示的。


使用PV3D要使用4个核心类,摄像头通过窗口将场景中的3D物体(3D物体需要通过addChild方法加载进场景中)拍摄下来,渲染器将拍摄下来的3D物体转换为2D物体,并映射到窗口中。最后,将窗口加载到文档类(FD中为启动类)中显示。