Doughnut with colorful smoke yshu forked:2favorite:14lines:61license : MIT License modified : 2009-10-26 01:02:54 Embed Tweet 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 = 3000 private var r:Number = 175 private var blurFilter:BlurFilter = new BlurFilter(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 point:Point = new Point() public function Doughnut() { var a:Number var b:Number for (var c:Number = 0; c < max; c++ ) { a = Math.PI * 2 * Math.random() b = Math.PI * 2 * Math.random() vertices.push ( r*Math.sin(a)*Math.cos(b), r*Math.sin(a)*Math.sin(b), r*Math.cos(a)*Math.sin(a) ) } addChild(new Bitmap(screen)) stage.align = 'TL' stage.quality= 'LOW' stage.scaleMode = 'noScale' stage.addEventListener('enterFrame', render) } private function render(...e):void { var t:Number = getTimer() / 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() } } } Code Fullscreen Preview Fullscreen bradsedito everdibe y_tti FlashFit ibu4gin tkinjo PESakaTFM t_matsuda selflash 178ep3 sw_lucchini uwi halfmile : 七彩发光 thinktaro : 疑似3D 3d ColorMatrixFilter pixel Math.max ColorMatrixFilter Vector3D.Y_AXIS Vector3D.X_AXIS Math.sin Math.cos Vector Math.PI addEventListener push addChild length Math.random Sprite Number sort new page view favorite forked pv427 forked from: Doughnut with col.. bradsedito forked:0 favorite:0lines:60 (diff:18) pv854 forked from: Doughnut with col.. fakestar0826 forked:1 favorite:5lines:61 (diff:6)