package { import away3d.cameras.HoverCamera3D; import away3d.containers.View3D; import away3d.materials.ColorMaterial; import away3d.primitives.Sphere; import away3d.primitives.Trident; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.MouseEvent; [SWF(width="500", height="400", frameRate="30", backgroundColor="#FFFFFF")] public class Triaxe extends Sprite { private var View:View3D; // HoverCam controls private var camera:HoverCamera3D; private var lastMouseX:Number; private var lastMouseY:Number; private var lastPanAngle:Number; private var lastTiltAngle:Number; private var move:Boolean = false; public function Triaxe() { // prep for handling resizing events this.stage.scaleMode = StageScaleMode.NO_SCALE; this.stage.align = StageAlign.TOP; // create a 3D-viewport camera = new HoverCamera3D({zoom:2, focus:100, distance:250}); View = new View3D({camera:camera,x:250, y:200}); // add viewport to the stage addChild(View); camera.panAngle = 45; camera.tiltAngle = 20; camera.minTiltAngle = -90; camera.hover(true); // Add some reference objects var mat:ColorMaterial = new ColorMaterial(0xffff00); var sphere1:Sphere = new Sphere({radius:10, material:mat, x:100,y:-150}); View.scene.addChild(sphere1); mat = new ColorMaterial(0xff00ff); var sphere2:Sphere = new Sphere({radius:10, material:mat, y:200,z:150}); View.scene.addChild(sphere2); mat = new ColorMaterial(0x00ffff); var sphere3:Sphere = new Sphere({radius:10, material:mat, z:100,x:-150}); View.scene.addChild(sphere3); // Show the axis var axis:Trident = new Trident(180); View.scene.addChild(axis); addEventListener(Event.ENTER_FRAME, onEnterFrame); this.stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown); this.stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp); } private function MouseDown(event:MouseEvent):void { lastPanAngle = camera.panAngle; lastTiltAngle = camera.tiltAngle; lastMouseX = stage.mouseX; lastMouseY = stage.mouseY; move = true; } private function MouseUp(event:MouseEvent):void { move = false; } private function onEnterFrame(e:Event):void { // re-render viewport var cameraSpeed:Number = 0.3; // Approximately same speed as mouse movement. if (move) { camera.panAngle = cameraSpeed*(stage.mouseX - lastMouseX) + lastPanAngle; camera.tiltAngle = cameraSpeed*(stage.mouseY - lastMouseY) + lastTiltAngle; } camera.hover(); View.render(); } } }