// forked from jkltf's forked from: PV3D Test (2) - BasicView.singleRender() // forked from jkltf's PV3D Test package { import flash.display.Graphics; import flash.display.Sprite; import com.flashdynamix.utils.SWFProfiler; import flash.events.Event; import flash.events.EventPhase; import flash.events.MouseEvent; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.view.BasicView; /** * TestPV3DRenderingControlRenderAsNeeded * * PV3D Rendering test (3) * Do the PV3D rendering as needed. * The CPU resource can be saved when the operator is idling. * * @author jkltf */ public class TestPV3DRenderingControlRenderAsNeeded extends Sprite { private var _view:BasicView; private var _grabbed:Boolean; private var _orbiting:Boolean; private var _yaw:Number = 0; public function TestPV3DRenderingControlRenderAsNeeded() { super(); init(); render(); } private function init():void { initStage(); initView(); initItem(); } private function initStage():void { SWFProfiler.init(this); stage.frameRate = 30; addEventListener(Event.ENTER_FRAME, enterFrameEventHandler); } private function enterFrameEventHandler(e:Event):void { if (_orbiting) _view.singleRender(); } private function mouseUpEventHandler(e:MouseEvent):void { _grabbed = _orbiting = false; } private function mouseDownEventHandler(e:MouseEvent):void { _grabbed = true; } private function mouseMoveEventHandler(e:MouseEvent):void { if (!_grabbed) return; _yaw++; _yaw %= 360; _view.camera.orbit(90, _yaw, true, DisplayObject3D.ZERO); _orbiting = true; } private function initView():void { _view = new BasicView(1, 1, true, true); _view.mouseEnabled = true; _view.addEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); _view.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownEventHandler); _view.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventHandler); addChild(_view); var g:Graphics = _view.graphics; g.beginFill(0x202020); g.drawRect(0, 0, stage.stageWidth, stage.stageHeight); g.endFill(); } private function initItem():void{ for (var i:uint = 0; i < 100; i++) { var item:DisplayObject3D = createItem(); item.x = -500 * Math.random() + 500 * Math.random(); item.y = -500 * Math.random() + 500 * Math.random(); item.z = 1000 * Math.random(); _view.scene.addChild(item); } } private static function createItem():DisplayObject3D { return new Sphere(null, 50); } private function render():void { _view.singleRender(); } } } forked from: forked from: PV3D Test (3) - Do the PV3D rendering as needed.