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

如何显示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中为启动类)中显示。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值