forked from: Doughnut with colorful smoke

by bradsedito forked from Doughnut with colorful smoke (diff: 18)
♥0 | Line 60 | Modified 2012-07-29 08:40:49 | MIT License
play

ActionScript3 source code

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

// forked from yshu's Doughnut with colorful smoke
package  
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.filters.BlurFilter;
    import flash.filters.ColorMatrixFilter;
    import flash.geom.Matrix3D;
    import flash.geom.Point;
    import flash.geom.Utils3D;
    import flash.geom.Vector3D;
    import flash.utils.getTimer;
    
    public class Doughnut extends Sprite
    {
        private var screen:BitmapData                    = new BitmapData(475, 475, false, 0)
        private var vertices:Vector.<Number>            = new Vector.<Number>()
        private var uvtData:Vector.<Number>                = new Vector.<Number>()        
        private var matrix3D:Matrix3D                     = new Matrix3D()
        private var projectedVertices:Vector.<Number>    = new Vector.<Number>()        
        private var max  :Number  =  10000
        private var r    :Number  =  20            
        private var blurFilter:BlurFilter = new BlurFilter( 6,6,6 )  //  ( 3,10,3 )
        private var colorMatrixFilter:ColorMatrixFilter = new ColorMatrixFilter([1.0789172123219,-0.1599448999802,0.0810276876583043,0,0,-0.0310251294027207,1.07137488688194,-0.0403497574792219,0,0,-0.124238196271341,-0.0166172810316758,1.14085547730302,0,0,0,0,0,1,0])        
        //private var colorMatrixFilter:ColorMatrixFilter = new ColorMatrixFilter( [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] )  //[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] )  //  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
        private var point:Point = new Point()
        
        
        public function Doughnut() 
        {
            stage.frameRate = 90 
            var a:Number
            var b:Number
            
            for (var c:Number = 0; c < max; c++ )
            {
                a = Math.PI * 2 * Math.random()  //2 * Math.random()
                b = Math.PI * 2 * Math.random()  //2 * Math.random()

                vertices.push
                (
                    ( ( r*Math.sin(a)*Math.cos(b) ) * 1) + 25,
                    ( ( r*Math.sin(a)*Math.sin(b) ) / 1) + 50,
                    ( ( r*Math.cos(a)*Math.sin(a) ) / 1)    
                )
            }

            addChild(new Bitmap(screen))
            
            //stage.align = 'TL'
            stage.quality= 'BEST'
            //stage.scaleMode = 'noScale'
            stage.addEventListener('enterFrame', render)
        }
        
        private function render(...e):void 
        {
            var t:Number = getTimer() / 6  //10
            
            matrix3D = new Matrix3D()
            matrix3D.prependRotation( t*-1.2 ,    Vector3D.X_AXIS)
            matrix3D.prependRotation( t,    Vector3D.Y_AXIS)

            Utils3D.projectVectors(matrix3D, vertices, projectedVertices, uvtData)
            
            screen.lock()
            screen.applyFilter(screen, screen.rect, point, blurFilter )
            screen.applyFilter(screen, screen.rect, point, colorMatrixFilter)
            screen.scroll(0,-10)
            for (var c:Number = 0;c<projectedVertices.length-1; c+=2 ) screen.setPixel(projectedVertices[c] + 238, projectedVertices[c + 1] + 238, 0xffffff/max*c)
            screen.unlock()
        }
    }
}