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

我们一般在构建papervision3D构架的时候需要创建下面是个基本的框架元素:
视图viewport >> 场景scene >> 相机camera >> 渲染器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);


你可能感兴趣的:(java,框架,Flash)