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