package { import away3d.cameras.HoverCamera3D; import away3d.containers.View3D; import away3d.core.utils.Cast; import away3d.materials.EnviroBitmapMaterial; import away3d.primitives.Torus; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; [SWF(width="500", height="300", frameRate="60", backgroundColor="#FFFFFF")] public class ExEnviroBitmapMaterial extends Sprite { [Embed(source="resources/earthmap1k.jpg")] private var reflectionBitmap:Class; [Embed(source="spiralgraphics/RawGold.jpg")] private var textureBitmap:Class; public var view:View3D; public var torus:Torus; // camera variables private var cam:HoverCamera3D; private var move:Boolean = false; private var lastPanAngle:Number; private var lastTiltAngle:Number; private var lastMouseX:Number; private var lastMouseY:Number; public function ExEnviroBitmapMaterial() { // Setup view and camera cam = new HoverCamera3D(); cam.tiltAngle = cam.panAngle = 0; cam.hover(true); cam.distance = 450; cam.minTiltAngle = -90; view = new View3D({x:250,y:150,camera:cam}); addChild(view); // Make material var reflectiveMaterial:EnviroBitmapMaterial = new EnviroBitmapMaterial( Cast.bitmap( textureBitmap ), Cast.bitmap( reflectionBitmap ) ); reflectiveMaterial.reflectiveness = 0.3; // Create torus and apply material torus = new Torus({segmentsR:21,segmentsT:13,material:reflectiveMaterial,rotationX:-35,radius:75,tube:35}); view.scene.addChild(torus); // Setup rendering and mouse events this.addEventListener(Event.ENTER_FRAME,update); stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown); stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp); } public function update(e:Event=null):void { // if we're not dragging, let the torus rotate by itself if(!move){ torus.rotationX += .5; torus.rotationY += .8; } var cameraSpeed:Number = 0.3; // Approximately same speed as mouse movement. if (move) { cam.panAngle = cameraSpeed*(stage.mouseX - lastMouseX) + lastPanAngle; cam.tiltAngle = cameraSpeed*(stage.mouseY - lastMouseY) + lastTiltAngle; } cam.hover(); view.render(); } private function MouseDown(event:MouseEvent):void { lastPanAngle = cam.panAngle; lastTiltAngle = cam.tiltAngle; lastMouseX = stage.mouseX; lastMouseY = stage.mouseY; move = true; } private function MouseUp(event:MouseEvent):void { move = false; } } }