forked from: flash on 2011-4-10

by tjoen
CUBIC SPECTRUM. generate camera path is uncomplete,
beside that the code works fine. Free to use.
♥0 | Line 121 | Modified 2011-04-11 00:30:07 | MIT License
play

ActionScript3 source code

/**
 * Copyright tjoen ( http://wonderfl.net/user/tjoen )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/iQYl
 */

// forked from Reach.Sammy's flash on 2011-4-10
package
{
    /**
     CUBIC SPECTRUM. generate camera path is uncomplete,
                     beside that the code works fine. Free to use.
    */
    
    import flash.display.*;
    import flash.filters.*;
    import flash.geom.*;
    import flash.events.*;
    import flash.media.*;
    import flash.utils.*;
    import flash.net.*;
    
    import org.papervision3d.materials.ColorMaterial;
    import org.papervision3d.materials.utils.MaterialsList;
    import org.papervision3d.objects.DisplayObject3D;
    import org.papervision3d.objects.primitives.Cube;
    import org.papervision3d.view.BasicView;
    
    import gs.TweenLite;
    
    import caurina.transitions.Tweener;
    
    [SWF(width = '456', height = '456', backgroundColor = '#000000', frameRate = '30')]
    
    public class CubeSpectrum extends BasicView
    {
        private var ba:ByteArray;
        private var timer:Timer;
        private var it:Number = 0;
        private var cubes:Array;
        private var container:DisplayObject3D;
        private var pivot:Sprite;
        private static const WAVE_RADIUS:uint = 100;
        private static const WAVE_COLORS:Array = [0x710630, 0xFB0165, 0xff652d];
        private var easeOut:Number = 0.5;    
        private var reachX:Number = 0.7;
        private var reachY:Number = 0.7;
    
        public function CubeSpectrum()
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(event:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            stage.quality = StageQuality.MEDIUM;
            
            var spacing:uint = 350;
            var dim:uint = 7;
            var c:uint = (dim * spacing * 0.5);
            var snd:Sound = new Sound();
            
            camera.x = 200;
            camera.y = 50;
            camera.z = 50;
 
            camera.zoom = 7;
            camera.focus = 60;
            camera.sort = false;
 
            pivot = new Sprite();
            pivot.x = 360;
            pivot.y = 345;
            
            container = new DisplayObject3D();
            scene.addChild(container);
             
            snd.load(new URLRequest("http://mutast.heteml.jp/works/music/music.mp3"));
            snd.play(0, int.MAX_VALUE);
            trace("$oundtrack Start");
 
            ba = new ByteArray();
            cubes = new Array();
            
            for(var i:uint = 0; i < dim; i ++)
            {
                for(var j:uint = 0; j < dim; j ++)
                {
                    for(var k:uint = 0; k < dim; k ++)
                    {
                        var size:uint = Math.random() * 20 + 40;
                        
                        var cube:Cube = new Cube(new MaterialsList({all:new ColorMaterial(0xFF0032)}), size, size, size, 1, 1, 1);
                    //var cube:Cube = new Cube(new MaterialsList({all:new ColorMaterial(0xFF0032 * Math.random())}), size, size, size, 1, 1, 1);
                                                                
                    //container.filters = [new GradientGlowFilter(0, 0, WAVE_COLORS, [0, 1], [0, 300, 285], 18, 18, 1, BitmapFilterQuality.MEDIUM, BitmapFilterType.FULL)];
                        container.addChild(cube);
                        
                        /**
                        cube.x = Math.random() * 2000 - 1000;
                        cube.y = Math.random() * 2000 - 1000;
                        cube.z = Math.random() * 2000 - 1000;
                        */
                        
                        cube.x = i * spacing - c;
                        cube.y = j * spacing - c;
                        cube.z = k * spacing - c;
                        
                        cube.useOwnContainer = true;
                        cube.alpha = 0.8;
                        cube.blendMode = BlendMode.ADD;
                        
                        /*
                        cube.rotationY = Math.random() * 360;
                        cube.scale = Math.random() * 3;
                         */
                        
                        cubes.push(cube);
                    }
                }
            }
                         
        //generateCameraPath();
            startRendering();
 
            timer = new Timer(100);
            timer.addEventListener(TimerEvent.TIMER, tick);
            timer.start();
        }
        
        private function tick(e:TimerEvent):void
        {
            var temp:Array = new Array();
 
            SoundMixer.computeSpectrum(ba, true, 0);
 
            for(var j:int = Math.random(); j < 256; j += Math.floor(256 / cubes.length))
            {
                temp.push((ba.readFloat() * 1.5) + 1);
            }
 
            for(var i:uint = 0; i < cubes.length; i++ )
            {
                TweenLite.to(cubes[i], 0.3, {scaleY:temp[i], scaleZ:temp[i], scaleX:temp[i]});
                cubes[i].alpha = temp[i] - 0.9;
                
              cubes.rotationY ++;
            }
        }
        
        
        private function generateCameraPath():void
        {
            var bz:Array = new Array();
            var bzT:Array = new Array();
    
            for (var i:Number = 0; i < 100; i++)
            {
                bz.push({x:Math.random() * stage.stageWidth * 2 - stage.stageHeight * 2, y:Math.random() *stage.stageWidth * 2 - stage.stageHeight * 2, z:Math.random() * stage.stageWidth * 2 - stage.stageHeight * 2});
                bzT.push({x:Math.random() * stage.stageWidth * 2 - stage.stageHeight * 2, y:Math.random() * 200-100, z:Math.random() * stage.stageWidth * 2 - stage.stageHeight * 2});        
            }
    
            Tweener.addTween(camera, {x:200, y:200, z:0, Bezier:bz, time:1000,transition:"linear"});
            Tweener.addTween(camera.target, {x:0, y:0, z:0, Bezier:bzT, time:1000, transition:"linear"});
            Tweener.addTween(container, {time:1000, onComplete:function():void{ generateCameraPath()}});
        }
        
        
        override protected function onRenderTick(event:Event = null):void
        {
            container.yaw(1);
            container.pitch(1); 
             
            this.camera.x += (( - pivot.mouseX * 5) - this.camera.x) / 35;
            this.camera.y += (( - pivot.mouseY * 5) - this.camera.y) / 35;
            
            super.onRenderTick();
        }
   // scene.renderCamera(camera);
    }
}