package { import flash.display.BitmapData; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageQuality; import flash.display.StageScaleMode; import flash.events.Event; import flash.geom.Vector3D; import alternativa.engine3d.containers.DistanceSortContainer; import alternativa.engine3d.controllers.SimpleObjectController; import alternativa.engine3d.core.Camera3D; import alternativa.engine3d.core.MipMapping; import alternativa.engine3d.core.Sorting; import alternativa.engine3d.core.View; import alternativa.engine3d.materials.TextureMaterial; import alternativa.engine3d.primitives.Box; [SWF(backgroundColor="#000000", frameRate="60", width="720", height="480")] public class Main extends Sprite { private static const CELL_NUM:uint = 7; [Embed(source="/assets/image.png")] private static const IMAGE:Class; public function Main() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.quality = StageQuality.LOW; // Camera camera = new Camera3D(); camera.view = new View(720, 480); addChild(camera.view); camera.x = 0; camera.y = 800; camera.z = 0; camera.fov = 45; // Camera controller controller = new SimpleObjectController(stage, camera, 200); controller.lookAt(new Vector3D()); // Root object container = new DistanceSortContainer(); container.sortByZ = true; wrap = new DistanceSortContainer(); wrap.sortByZ = true; container.addChild(wrap); // Box for (var i:int = 0; i < CELL_NUM; i++) { for (var j:int = 0; j < CELL_NUM; j++) { for (var k:int = 0; k < CELL_NUM; k++) { var material:TextureMaterial = new TextureMaterial(); material.texture = new IMAGE().bitmapData; material.mipMapping = MipMapping.NONE; material.repeat = false; material.smooth = true; var box:Box = new Box(30, 30, 30, 1, 1, 1); box.setMaterialToAllFaces(material); box.sorting = Sorting.NONE; box.x = 50 * (i - CELL_NUM / 2); box.y = 50 * (j - CELL_NUM / 2); box.z = 50 * (k - CELL_NUM / 2); wrap.addChild(box); this.cubes.push(box); } } } // Adding container.addChild(camera); // Debug addChild(camera.diagram); addEventListener(Event.ENTER_FRAME, enterFrameHandler); stage.addEventListener(Event.RESIZE, resizeHandler); } private var cubes:Array = []; private var camera:Camera3D; private var controller:SimpleObjectController; private var container:DistanceSortContainer; private var wrap:DistanceSortContainer; private function enterFrameHandler(e:Event = null):void { for (var i:int = 0; i < cubes.length; i++) { cubes[i].rotationX += 1 * Math.PI / 180; cubes[i].rotationY += 1 * Math.PI / 180; } wrap.rotationX += 1 * Math.PI / 180; wrap.rotationY += 1 * Math.PI / 180; controller.update(); camera.render(); } private function resizeHandler(e:Event = null):void { camera.view.width = stage.stageWidth; camera.view.height = stage.stageHeight; } } }