package { import away3d.cameras.HoverCamera3D; import away3d.containers.View3D; import away3d.core.utils.Cast; import away3d.materials.EnviroBitmapMaterial; import away3d.materials.EnviroColorMaterial; import away3d.primitives.Sphere; import away3d.primitives.Torus; import away3d.core.render.Renderer; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.display.BlendMode; [SWF(width="500", height="300", frameRate="60", backgroundColor="#FFFFFF")] public class Basic09_EnviroBitmapMaterial extends Sprite { [Embed(source="resources/earthmap1k.jpg")] private var reflectionBitmap:Class; [Embed(source="spiralgraphics/RawGold.jpg")] private var textureBitmap:Class; private var view:View3D; private var torus:Torus; private var sphere:Sphere; // 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 Basic09_EnviroBitmapMaterial() { // Setup view and camera cam = new HoverCamera3D(); cam.targetpanangle = cam.targettiltangle = cam.tiltangle = cam.panangle = 0; 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:15,segmentsT:12,material:reflectiveMaterial}); torus.tube = 35; torus.radius = 75; 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); } private function update(e:Event):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.targetpanangle = cameraSpeed*(stage.mouseX - lastMouseX) + lastPanAngle; cam.targettiltangle = cameraSpeed*(stage.mouseY - lastMouseY) + lastTiltAngle; } cam.hover(); view.render(); } private function MouseDown(event:MouseEvent):void { lastPanAngle = cam.targetpanangle; lastTiltAngle = cam.targettiltangle; lastMouseX = stage.mouseX; lastMouseY = stage.mouseY; move = true; } private function MouseUp(event:MouseEvent):void { move = false; } } }