package { import flash.display.Sprite; import flash.events.Event; import org.papervision3d.core.proto.CameraObject3D; import org.papervision3d.view.Viewport3D; // We need a viewport import org.papervision3d.cameras.*; // Import all types of camera import org.papervision3d.scenes.Scene3D; // We'll need at least one scene import org.papervision3d.render.BasicRenderEngine; // And we need a renderer public class Ancestor extends Sprite { //Must be "extends Sprite" public var viewport:Viewport3D; // The Viewport public var renderer:BasicRenderEngine; // Rendering engine public var current_scene:Scene3D; public var current_camera:CameraObject3D; public var current_viewport:Viewport3D; public var default_scene:Scene3D; public var default_camera:Camera3D; public function init(vpWidth:Number = 800, vpHeight:Number = 600):void { initPapervision(vpWidth, vpHeight); // Initialise papervision init3d(); initEvents(); // Set up any event listeners.. } protected function initPapervision(vpWidth:Number, vpHeight:Number):void { if (vpWidth == 0) { viewport = new Viewport3D(stage.width, stage.height, true, true); }else{ viewport = new Viewport3D(vpWidth, vpHeight, false, true); } addChild(viewport); renderer = new BasicRenderEngine(); default_scene = new Scene3D(); default_camera = new Camera3D(); current_camera = default_camera; current_scene = default_scene; current_viewport = viewport; } protected function init3d():void { } protected function initEvents():void { addEventListener(Event.ENTER_FRAME, onEnterFrame); } protected function processFrame():void { // Process any movement or animation here. } protected function onEnterFrame( ThisEvent:Event ):void { //We need to render the scene and update anything here. processFrame(); renderer.renderScene(current_scene, current_camera, current_viewport); } } }