package { import flare.basic.*; import flare.core.*; import flare.loaders.*; import flare.system.*; import flash.display.*; import flash.display3D.*; import flash.events.*; import flash.geom.*; [SWF( width = 800, height = 450, frameRate = 60 )] /** * @author Ariel Nehmad */ public class Test59_CustomCameraRender extends Sprite { private var scene:Scene3D; private var secondCamera:Camera3D; public function Test59_CustomCameraRender() { scene = new Viewer3D( this, null, 0.4 ); scene.autoResize = true; // creates the second camera. secondCamera = new Camera3D( "second camera", 60 ); secondCamera.setPosition( 50, 100, -150 ); secondCamera.lookAt( 0, 0, 0 ); secondCamera.viewPort = new Rectangle( 20, 20, 250, 150 ); // external loading. scene.addChildFromFile( "chess.zf3d" ); scene.skipFrames = false; scene.addEventListener( Scene3D.COMPLETE_EVENT, completeEvent ); } private function completeEvent(e:Event):void { scene.addEventListener( Scene3D.POSTRENDER_EVENT, postRenderEvent ); } private function postRenderEvent(e:Event):void { graphics.clear(); graphics.lineStyle( 1, 0xff0000 ); graphics.drawRect( 20, 20, 250, 150 ); // we need to clear depth in order to draw the second camera on top. scene.context.clear( 0, 0, 0, 0, 1, 0, Context3DClearMask.DEPTH ); scene.setupFrame( secondCamera ); scene.getChildByName( "Desk" ).draw(); } } }