package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageQuality; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.MouseEvent; import org.papervision3d.scenes.*; import org.papervision3d.cameras.*; import org.papervision3d.objects.*; import org.papervision3d.materials.*; import org.papervision3d.events.*; public class Main extends Sprite { // -------------------- Properties -------------------- private var _container : Sprite; private var _scene3D : InteractiveScene3D; private var _rootNode : DisplayObject3D; private var _camera3D : Camera3D; // -------------------- Methods -------------------- public function Main() { // define : Stage stage.align = StageAlign.TOP_LEFT; stage.quality = StageQuality.BEST; stage.scaleMode = StageScaleMode.NO_SCALE; stage.frameRate = 60; // Methods for Papervision3D init3D(); createObjects( -50 , 0xff0000 ); createObjects( 50 , 0x0000ff ); addEventListener( Event.ENTER_FRAME , loop3D ); } private function init3D():void { // container _container = new Sprite(); addChild( _container ); _container.x = stage.stageWidth / 2; _container.y = stage.stageHeight / 2; // scene _scene3D = new InteractiveScene3D( _container ); // rootNode _rootNode = _scene3D.addChild( new DisplayObject3D( "_rootNode" ) ); // camera _camera3D = new Camera3D(); _camera3D.zoom = 2; _camera3D.focus = 1000; // addEventLIstener _scene3D.interactiveSceneManager.addEventListener( InteractiveScene3DEvent.OBJECT_OVER , handleMouseOver ); _scene3D.interactiveSceneManager.addEventListener( InteractiveScene3DEvent.OBJECT_OUT , handleMouseOut ); /* _scene3D.interactiveSceneManager.addEventListener( InteractiveScene3DEvent.OBJECT_PRESS , handleMousePress ); _scene3D.interactiveSceneManager.addEventListener( InteractiveScene3DEvent.OBJECT_RELEASE , handleMouseRelease ); _scene3D.interactiveSceneManager.addEventListener( InteractiveScene3DEvent.OBJECT_CLICK , handleMouseClick ); _scene3D.interactiveSceneManager.addEventListener( InteractiveScene3DEvent.OBJECT_RELEASE_OUTSIDE , handleReleaseOutside ); _scene3D.interactiveSceneManager.addEventListener( InteractiveScene3DEvent.OBJECT_MOVE , handleMouseMove ); */ } private function createObjects( z:Number , color:uint ):void { // define : Material var m : InteractiveColorMaterial = new InteractiveColorMaterial( color ); m.doubleSided = true; // define : 3D primitive object var w : uint = 75; var h : uint = 75; var seg : uint = 2; var p : Plane = new Plane( m , w , h , seg , seg ); p.z = z; _rootNode.addChild( p ); } private function loop3D( e:Event ):void { // culculate for objects rotation _rootNode.rotationY += _container.mouseX / 100; _rootNode.rotationX += _container.mouseY / 100; // rendering _scene3D.renderCamera( _camera3D ); } // MouseEventAction private function handleMouseOver( e:InteractiveScene3DEvent ):void { e.displayObject3D.scaleX = 1.3; e.displayObject3D.scaleY = 1.3; } private function handleMouseOut( e:InteractiveScene3DEvent ):void { e.displayObject3D.scaleX = 1; e.displayObject3D.scaleY = 1; } /* private function handleMousePress( e:InteractiveScene3DEvent ):void { dispState( "press" , e.displayObject3D.name ); } private function handleMouseRelease( e:InteractiveScene3DEvent ):void { dispState( "release" , e.displayObject3D.name ); } private function handleMouseClick( e:InteractiveScene3DEvent ):void { dispState( "click" , e.displayObject3D.name ); } private function handleReleaseOutside( e:InteractiveScene3DEvent ):void { dispState( "releaseOutside" , e.displayObject3D.name ); } private function handleMouseMove( e:InteractiveScene3DEvent ):void { dispState( "move" , e.displayObject3D.name ); } */ } }