package { /** * * Auteur: Vincent Helwig * Date: 25.09.2008 * Website: http://www.tsoin.com * Description: Alternativa3D - Création d’un cube * **/ import alternativa.engine3d.controllers.CameraController; import alternativa.engine3d.core.Camera3D; import alternativa.engine3d.core.Object3D; import alternativa.engine3d.core.Scene3D; import alternativa.engine3d.display.View; import alternativa.engine3d.materials.WireMaterial; import alternativa.engine3d.primitives.Box; import alternativa.utils.FPS; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.MouseEvent; [SWF(backgroundColor="#000000", frameRate="100", width="600", height="400")] public class Alternativa3D_002 extends Sprite { private var scene:Scene3D; private var view:View; private var camera:Camera3D; private var cameraController:CameraController; private var box:Box; private var _numFaces:uint = 3; public function Alternativa3D_002() { addEventListener(Event.ADDED_TO_STAGE, init); } public function init(e:Event): void { removeEventListener(Event.ADDED_TO_STAGE, init); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; setupScene(); stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); } private function setupScene():void { scene = new Scene3D(); scene.root = new Object3D(); camera = new Camera3D(); camera.x = 0; camera.y = 0; camera.z = -300; camera.zoom = 10; camera.fov = 1.5; scene.root.addChild(camera); view = new View(); view.width = 600; view.height = 400; addChild(view); view.camera = camera; createBox(); cameraController = new CameraController(stage); cameraController.camera = camera; FPS.init(stage); } private function onMouseMove(event:Event):void { box.rotationX = Math.PI * ( ( stage.mouseY * 180 ) / stage.stageHeight - 90 ) / 180; box.rotationY = Math.PI * ( ( stage.mouseX * 180 ) / stage.stageWidth - 90 ) / 180; } private function createBox():void { box = new Box(100, 100, 100, _numFaces, _numFaces, _numFaces); box.cloneMaterialToAllSurfaces(new WireMaterial(1, 0x789789)); scene.root.addChild( box ); } private function onKeyDown(event:KeyboardEvent):void { if ( event.keyCode == 107 || event.keyCode == 187 ) { _numFaces++; } else if ( ( event.keyCode == 109 || event.keyCode == 54) && _numFaces != 1 ) { _numFaces--; } if ( box.parent != null) { scene.root.removeChild( box ); } createBox(); } private function onEnterFrame(event:Event):void { cameraController.processInput(); scene.calculate(); } } }