In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

Sum Of All Possibilities - 3D

2D - http://wonderfl.net/c/pY1r
Original Artwork - http://www.troika.uk.com/work/the-sum-of-all-possibilities-2/
Get Adobe Flash player
by greentec 13 Dec 2015
/**
 * Copyright greentec ( http://wonderfl.net/user/greentec )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/K6v8
 */

// forked from greentec's Sphere
package {
    import away3d.entities.Mesh;
    import away3d.materials.ColorMaterial;
    import away3d.primitives.CubeGeometry;
    import away3d.primitives.PlaneGeometry;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.display.StageScaleMode;
    import flash.display.StageAlign;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import away3d.cameras.Camera3D;
    import away3d.containers.Scene3D;
    import away3d.containers.View3D;
    import away3d.controllers.HoverController;
    import away3d.debug.AwayStats;
    import away3d.lights.DirectionalLight;
    import away3d.materials.lightpickers.StaticLightPicker;

    public class FlashTest extends Sprite {
        
        private var view:View3D;
        private var scene:Scene3D;
        private var camera:Camera3D;
        private var awayStats:AwayStats;
        
        private var cameraController:HoverController;
        
        private var light:DirectionalLight;
        private var lightPicker:StaticLightPicker;
        
        private var colorMaterial:ColorMaterial;
        private var cubeGeometry:CubeGeometry;
        
        private var cubeArray:Array;
        
        //navigation variables
        private var move:Boolean = false;
        private var lastPanAngle:Number;
        private var lastTiltAngle:Number;
        private var lastMouseX:Number;
        private var lastMouseY:Number;

        //private var source:BitmapData = new BitmapData(465, 465, false, 0x000000);       

        
        public function FlashTest() {
            // write as3 code here..
            
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            
            Wonderfl.disable_capture();

            //addChild(new Bitmap(source));
           
            initEngine();
            initLight();
            initMaterial();
            initObject();
            initListener();
        }
        
        private function render(e:Event):void
        {
            if (move)
            {
                cameraController.panAngle = 0.3 * (stage.mouseX - lastMouseX) + lastPanAngle;
                cameraController.tiltAngle = 0.3 * (stage.mouseY - lastMouseY) + lastTiltAngle;
            }
            
            var i:int;
            var len:int = cubeArray.length;
            var cube:Cube;
            
            for (i = 0; i < len; i += 1)
            {
                cube = cubeArray[i];
                
                cube.angle += cube.angleVelocity;
                cube.angle %= 360;
                
                cube.x = Math.cos(cube.angle / 180 * Math.PI) * cube.circleRadius;
                cube.z = Math.sin(cube.angle / 180 * Math.PI) * cube.circleRadius;
                
                cube.rotationY = -cube.angle;
            }
            
            view.render();
            //view.renderer.queueSnapshot(source);
        }
        
        private function initMaterial():void 
        {
            colorMaterial = new ColorMaterial(0x333333);
            colorMaterial.lightPicker = lightPicker;
            colorMaterial.ambient = .2;
            colorMaterial.specular = .5;
            
            cubeGeometry = new CubeGeometry(10, 10, 10, 1, 1, 1, false);
        }
        
        private function initListener():void
        {
            stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
            stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
            stage.addEventListener(Event.RESIZE, resizeHandler);
            addEventListener(Event.ENTER_FRAME, render);
            
            
            addChild(view);
            addChild(awayStats);
        }
        
        private function initObject():void
        {
            var i:int;
            var j:int;
            var cube:Cube;
            var radius:int = 200;
            var circleRadius:int;
            var angle:Number = 0;
            var h:Number;
            
            cubeArray = [];
            
            for (i = 25; i < 155; i += 5)
            {
                h = radius * Math.sin((90 - i) / 180 * Math.PI);
                circleRadius = Math.sqrt(radius * radius - h * h);
                //trace(circleRadius);
                
                for (j = 0; j < 180; j += int(radius / circleRadius) * 4)
                {
                    cube = new Cube((90 - Math.abs(i - 90)) / 450, cubeGeometry, colorMaterial);
                    cube.y = h;
                    cube.x = Math.cos(j / 180 * Math.PI) * circleRadius;
                    cube.z = Math.sin(j / 180 * Math.PI) * circleRadius;
                    cube.angle = j;
                    cube.circleRadius = circleRadius;
                    cube.rotationY = -cube.angle;
                    
                    scene.addChild(cube);
                    cubeArray.push(cube);
                }
            }
            
            with(scene.addChild (new Mesh (new PlaneGeometry (10000, 10000), new ColorMaterial(0xcccccc))))
            { y = -400; rotationY = -45; }
            
        }
        
        private function initLight():void
        {
            light = new DirectionalLight( -0.5, -1, -1);
            light.color = 0xffffff;
            light.ambient = 1;
            scene.addChild(light);
            
            lightPicker = new StaticLightPicker([light]);
        }
        
        private function initEngine():void
        {
            view = new View3D();
            view.antiAlias = 4;
            
            scene = view.scene;
            camera = view.camera;
            camera.lens.far = 5000;
            
            cameraController = new HoverController(camera);
            cameraController.distance = 500;
            cameraController.panAngle = 45;
            cameraController.tiltAngle = 20;
            
            awayStats = new AwayStats(view);
            
        }
        
        private function onMouseDown(e:MouseEvent):void
        {
            lastPanAngle = cameraController.panAngle;
            lastTiltAngle = cameraController.tiltAngle;
            lastMouseX = stage.mouseX;
            lastMouseY = stage.mouseY;
            move = true;
           
        }
        
        private function onMouseUp(e:MouseEvent):void
        {
            move = false;
        }
        
        private function resizeHandler(e:Event):void
        {
            view.width = stage.stageWidth;
            view.height = stage.stageHeight;
        }
    }
}

Class
{
    import away3d.entities.Mesh;
    import away3d.materials.ColorMaterial;
    import away3d.primitives.CubeGeometry;
    /**
     * ...
     * @author ypc
     */
    class Cube extends Mesh
    {
        public var angleVelocity:Number;
        public var angle:Number;
        public var circleRadius:int;
        
        public function Cube(vel:Number, geometry:CubeGeometry, material:ColorMaterial) 
        {
            super(geometry, material);
            
            this.angleVelocity = vel;
        }
    }
}