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