`

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);


分享到:
评论

相关推荐

    papervision 3D-20-alpha-great-while

    创建一个Papervision 3D项目的第一步是构建基本的框架类。这涉及继承自`Sprite`类、声明必要的Papervision 3D变量(如Viewport3D、Scene3D等)、初始化这些变量以及渲染场景。 - **步骤概述**: 1. **继承自Sprite*...

    Papervision3D-demo.rar_DEMO_Papervision3D demo_Papervision3D mxm

    通过研究这些源码,开发者不仅可以掌握Papervision3D的基本用法,还能了解到如何将3D元素与2D界面融合,创建出富有层次感的Web应用。此外,对于想要深入了解3D图形编程的人来说,这些实例也是深入研究Papervision3D...

    Papervision3D.Essentials

    ### Papervision3D.Essentials - 关键知识点解析 #### 一、Papervision3D概述 - **定义**: Papervision3D是一种强大的实时3D引擎,专为Flash设计。它能够将外部创建的3D模型渲染成Flash内容,无需终端用户下载或...

    Papervision3D 教程打包下载

    这个教程集合提供了深入学习Papervision3D所需的知识,包括PV3D的基本概念、对象模型、渲染技术以及与Flex框架的集成。 1. **Papervision3D基础**:Papervision3D是Flash平台上的3D引擎,它允许开发者在网页和桌面...

    《Papervision3D_Essentials》中文翻译

    - **基本形状**:讲解如何使用Papervision3D创建常见的3D几何体,如立方体、球体、圆柱等。 - **操作3D对象**:介绍如何在3D空间中移动、旋转和平移这些基本形状。 #### 5. 材质 - **材质定义**:解释Papervision...

    papervision3D学习资料

    本学习资料主要涵盖了Papervision3D的基本概念、使用方法以及实例应用,旨在帮助初学者和有经验的开发人员深入理解这一强大的3D引擎。 1. **Papervision3D基础知识** - **ActionScript 3.0**: Papervision3D是建立...

    Papervision3D

    Papervision3D的核心理念是提供一个强大的框架,让开发者能够轻松地创建互动式3D内容,如游戏、模拟、数据可视化和动态图形。 1. **基本概念** - **ActionScript 3.0**: Flash平台的编程语言,与AS2相比,具有更高...

    PaperVision3D

    首先,让我们深入理解PaperVision3D的基本概念。PaperVision3D使用ActionScript 3.0(AS3.0)进行编程,这是一种面向对象的脚本语言,相较于AS2.0,其性能显著提升,内存管理更加高效。通过PaperVision3D,开发者...

    《Papervision3D+Essentials》中文翻译

    Papervision3D(简称PV3D)是Flash平台上最早的3D渲染引擎之一,它为开发者提供了在Web浏览器中构建三维互动体验的能力。这本书的中文翻译版本,对于国内的开发人员来说,无疑是一个学习PV3D技术的重要资源。 1. **...

    papervision3d_868.swc

    《PaperVision3D SDK在Flex环境中的应用与实践》 PaperVision3D(简称PV3D)是一款基于Adobe Flex和ActionScript 3.0的开源3D图形库,它为Web开发者提供了在Flash Player环境中构建三维图形和交互式应用程序的能力...

    papervision3D

    标题"papervision3D"指的是这个框架的核心主题,即Papervision3D库,它是一个开源项目,由Carlos Ulloa领导的团队开发。Papervision3D为开发人员提供了一个完整的3D生态系统,包括场景管理、光照、纹理、摄像机控制...

    初识Papervision3D

    在《初识Papervision3D》的博文中,作者可能会详细介绍如何设置基本的3D场景,包括初始化渲染器、创建摄像机和光源,以及添加3D对象。此外,还会涉及如何编写简单的动画,例如物体的平移、旋转等。博主可能会分享...

    Flash3D引擎-Papervision3D

    《Papervision3D——探索Flash3D引擎的魅力》 在数字媒体的世界里,Flash以其广泛的应用和灵活的表现力,一直是网页动画和互动设计的重要工具。然而,随着技术的发展,用户对三维(3D)视觉体验的需求日益增长,这...

    PV3d Papervision3d API文档+学习笔记+全景案例

    《PV3d Papervision3D API文档与全景案例解析》 Papervision3D(PV3D)是一款强大的开源3D图形引擎,专为Adobe Flash平台设计,支持ActionScript 3.0(AS3),是Flash AS3中实现3D效果的重要工具。在本文中,我们将...

    Papervision3D的API

    《Papervision3D API详解》 Papervision3D(PV3D)是Flash平台上的一款强大的3D图形库,它允许开发者在网页上创建丰富的、交互式的三维图形和应用程序。...希望本文对你的Papervision3D学习之路有所帮助。

    Papervision3D.swc

    Papervision3D_2.0.869.swc

Global site tag (gtag.js) - Google Analytics