/** * @mxmlc -sp+=E:\AS3\CubeDemo -sp+=E:\papervision\svn\as3\src */ package { import flash.display.Sprite; import flash.display.Stage; import flash.display.StageAlign; import flash.display.StageQuality; import flash.display.StageScaleMode; import flash.events.Event; import org.papervision3d.cameras.Camera3D; import org.papervision3d.materials.MaterialsList; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.materials.BitmapFileMaterial; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.Plane; import org.papervision3d.objects.Cube; import org.papervision3d.scenes.Scene3D; [SWF(backgroundColor="#000000", frameRate="60", width="800", height="600")] public class main extends Sprite { public static const MAX_VELOCITY:Number = 4; public static const CUBE_SIZE:Number = 600; public static const SOFT_ZONE:Number = 150; private var camera:Camera3D; private var scene:Scene3D; private var paperCanvas:Sprite; private var cube:Cube; private var velV:Number = 0; private var velH:Number = 0; function main() { stage.addEventListener(Event.RESIZE, onStageResize); stage.quality = StageQuality.MEDIUM; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; paperCanvas = new Sprite(); paperCanvas.x = 400; paperCanvas.y = 300; addChild(paperCanvas); setupScene(); addEventListener( Event.ENTER_FRAME, onEnterFrame ); } private function setupScene():void { scene = new Scene3D(paperCanvas); // Create camera camera = new Camera3D(); camera.x = 3000; camera.z = -300; camera.zoom = 10; camera.focus = 100; var cubeMaterial:ColorMaterial = new ColorMaterial(0x00aacc); cubeMaterial.lineColor = 0x00ccff; cubeMaterial.lineAlpha = 1; var ml:MaterialsList = new MaterialsList(); ml.addMaterial(new ColorMaterial(0xff0000), 'face1'); ml.addMaterial(new ColorMaterial(0x00ff00), 'face2'); ml.addMaterial(new ColorMaterial(0x0000ff), 'face3'); ml.addMaterial(new ColorMaterial(0xff00ff), 'face4'); ml.addMaterial(new ColorMaterial(0x00ffff), 'face5'); ml.addMaterial(new ColorMaterial(0xffff00), 'face6'); //cube = new Cube(null, CUBE_SIZE, CUBE_SIZE, CUBE_SIZE); //cube = new Cube(cubeMaterial, CUBE_SIZE, CUBE_SIZE, CUBE_SIZE); cube = new Cube(ml, CUBE_SIZE, CUBE_SIZE, CUBE_SIZE); scene.addChild(cube, 'myCube'); } private function onEnterFrame( event :Event ):void { if (paperCanvas.mouseX > SOFT_ZONE || paperCanvas.mouseX < -SOFT_ZONE) { velH += paperCanvas.mouseX / 1600; } else { velH -= velH / 30; } velH = Math.min(Math.max(-MAX_VELOCITY, velH), MAX_VELOCITY); if (paperCanvas.mouseY > SOFT_ZONE || paperCanvas.mouseY < -SOFT_ZONE) { velV += paperCanvas.mouseY / 1600; } else { velV -= velV / 30; } velV = Math.min(Math.max(-MAX_VELOCITY, velV), MAX_VELOCITY); cube.rotationY -= velH; cube.rotationZ -= velV; scene.renderCamera( camera ); } private function onStageResize(event:Event):void { paperCanvas.x = stage.stageWidth/2; paperCanvas.y = stage.stageHeight/2; } } }