papervision3D基本框架之-BasicView基本视图

我们一般在构建papervision3D构架的时候需要创建下面是个基本的框架元素:
[b]视图[/b]viewport >> [b]场景[/b]scene >> [b]相机[/b]camera >> [b]渲染器[/b]renderer

private var viewport:Viewport3D;     
private var scene:Scene3D;
private var camera:FreeCamera3D;
private var renderer:BasicRenderEngine;


从Viewport3D的定义
public class Viewport3D extends Sprite implements IViewport3D


我们可以看到Viewport3D是继承之Sprite,它具有了Sprite的所有属性和方法。
同时它实现(implements)了IViewport3D的接口方法。

现在papervision3D给我们提供了一个BasicView,它包含了我们需要的所有元素。
我们看看BasicView的构造函数
public class BasicView extends AbstractView implements IView

BasicView继承自AbstractView(抽象类视图,我们可以这么理解,但是AbstractView是继承自Sprite的)
public class AbstractView extends Sprite implements IView

BasicView(基本视图)和AbstractView(抽象类视图)都实现了统一的接口方法IView。
大家先看看BasicView的全部代码:
package org.papervision3d.view
{
import flash.display.Sprite;
import flash.events.Event;

import org.papervision3d.core.proto.CameraObject3D;
import org.papervision3d.core.view.IView;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;

/**
* @Author Ralph Hauwert
*/
public class AbstractView extends Sprite implements IView
{
protected var _camera:CameraObject3D;
protected var _height:Number;
protected var _width:Number;

public var scene:Scene3D;
public var viewport:Viewport3D;
public var renderer:BasicRenderEngine;

public function AbstractView()
{
super();
}

public function startRendering():void
{
addEventListener(Event.ENTER_FRAME, onRenderTick);
viewport.containerSprite.cacheAsBitmap = false;
}

public function stopRendering(reRender:Boolean = false, cacheAsBitmap:Boolean = false):void
{
removeEventListener(Event.ENTER_FRAME, onRenderTick);
if(reRender){
onRenderTick();
}
if(cacheAsBitmap){
viewport.containerSprite.cacheAsBitmap = true;
}else{
viewport.containerSprite.cacheAsBitmap = false;
}
}

public function singleRender():void
{
onRenderTick();
}

protected function onRenderTick(event:Event = null):void
{
renderer.renderScene(scene, _camera, viewport);
}

public function get camera():CameraObject3D
{
return _camera;
}

public function set viewportWidth(width:Number):void
{
_width = width;
viewport.width = width;
}

public function get viewportWidth():Number
{
return _width;
}

public function set viewportHeight(height:Number):void
{
_height = height;
viewport.height = height;
}

public function get viewportHeight():Number
{
return _height;
}

}
}

它内含了
 
protected var _camera:CameraObject3D; //(保护属性)相机
protected var _height:Number; //(保护属性)画布的宽
protected var _width:Number; // (保护属性) 画布的高

public var scene:Scene3D; // (公开属性) 三维场景
public var viewport:Viewport3D; // (公开属性) 三维视图
public var renderer:BasicRenderEngine; // (公开属性) 渲染器

继续分析:

//继承Sprite的构造方法
public function AbstractView()
{
super();
}

下面的三个函数:
		function singleRender():void;
function startRendering():void;
function stopRendering(reRender:Boolean = false, cacheAsBitmap:Boolean = false):void;
}

实现了IView接口函数
见IView接口类代码如下:
package org.papervision3d.core.view
{
/**
* @Author Ralph Hauwert
*/
public interface IView
{
function singleRender():void;
function startRendering():void;
function stopRendering(reRender:Boolean = false, cacheAsBitmap:Boolean = false):void;
}
}

BasicView的构造函数:
public function BasicView(viewportWidth:Number = 640, viewportHeight:Number = 480, scaleToStage:Boolean = true, interactive:Boolean = false, cameraType:String = "Target")

分析一下参数:
BasicView(视图的长-默认640,视图的宽-默认480,是否随着舞台缩放,场景是否可以交互,摄像机的类型-默认类型是Target类型)
pv3d的在线帮助文件中描述如下:
Parameters  viewportWidth:Number (default = 640) — Width of the viewport  

viewportHeight:Number (default = 480) — Height of the viewport

scaleToStage:Boolean (default = true) — Whether you viewport should scale with the stage

interactive:Boolean (default = false) — Whether your scene should be interactive

cameraType:String (default = "Target") — A String for the type of camera.

最终这些参数会在生成viewport3D对象的时候直接作为它的参数传给viewport3D的构造函数了。
viewport = new Viewport3D(viewportWidth, viewportHeight, scaleToStage, interactive);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值