BasicView类,AbstractView类,IView接口

package org.papervision3d.view
{
	import org.papervision3d.cameras.SpringCamera3D;	
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.cameras.CameraType;
	import org.papervision3d.cameras.DebugCamera3D;
	import org.papervision3d.core.view.IView;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.scenes.Scene3D;

	/**
	 * <p>
	 * BasicView provides a simple template for quickly setting up
	 * basic Papervision3D projects by creating a viewport, scene,
	 * camera, and renderer for you. Because BasicView is a subclass of
	 * Sprite, it can be added to any DisplayObject.
	 * 
	 * </p>
	 * 
	 * <p>
	 * <p>
	 * Example:
	 * </p>
	 * <pre><code>
	 * var width:Number = 640;
	 * var heigth:Number = 480;
	 * var scaleToStage:Boolean = true;
	 * var interactive:Boolean = true;
	 * var cameraType:String = Camera3D.TYPE;
	 * 
	 * var myBasicView:BasicView = new BasicView(width, height, scaleToStage, interactive, cameraType);
	 * myDisplayObject.addChild(myBasicView);
	 * </code></pre>
	 * </p>
	 * @author Ralph Hauwert
	 */
	public class BasicView extends AbstractView implements IView
	{
		/**
		 * @param viewportWidth		Width of the viewport 
		 * @param viewportHeight	Height of the viewport
		 * @param scaleToStage		Whether you viewport should scale with the stage
		 * @param interactive		Whether your scene should be interactive
		 * @param cameraType		A String for the type of camera. @see org.papervision3d.cameras.CameraType
		 * 
		 */	
		public function BasicView(viewportWidth:Number = 640, viewportHeight:Number = 480, scaleToStage:Boolean = true, interactive:Boolean = false, cameraType:String = "Target")
		{
			super();
			
			scene = new Scene3D();
			viewport = new Viewport3D(viewportWidth, viewportHeight, scaleToStage, interactive);
			addChild(viewport);
			renderer = new BasicRenderEngine();
			
			switch(cameraType)
			{
				case CameraType.DEBUG:
					_camera = new DebugCamera3D(viewport);
					break;
				case CameraType.TARGET:
					_camera = new Camera3D(60);
					_camera.target = DisplayObject3D.ZERO;
					break;
				case CameraType.SPRING:
					_camera = new SpringCamera3D();
					_camera.target = DisplayObject3D.ZERO;		
					break;			
				case CameraType.FREE:
				default:
					_camera = new Camera3D(60);
					break;
			}
			
			cameraAsCamera3D.update(viewport.sizeRectangle);
		}
		
        /**
         * Exposes the camera as a <code>Camera3D</code>
         */
        public function get cameraAsCamera3D():Camera3D
        {
                return _camera as Camera3D;
        }
        
        /**
         * Exposes the camera as a <code>DebugCamera3D</code>
         */
        public function get cameraAsDebugCamera3D():DebugCamera3D 
        {
                return _camera as DebugCamera3D;
        }
	}
}

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值