package{ import __AS3__.vec.Vector; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.PixelSnapping; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageQuality; import flash.display.StageScaleMode; import flash.events.Event; import flash.geom.Matrix3D; import flash.geom.PerspectiveProjection; import flash.geom.Point; import flash.geom.Rectangle; import flash.utils.getTimer; import net.everyinch.geom.Particle; [SWF(width="800",height="600",frameRate="32",backgroundColor="0x000000")] public class ParticleShape3 extends Sprite{ private const PI2:Number = Math.PI*2; private var bmpd:BitmapData = new BitmapData(800,600,false,0); private var buffer:Vector. = new Vector.(800*600,true); private var focalLength:Number; private var matrix:Matrix3D = new Matrix3D(); private var particle:Particle = new Particle(); private var phi:Number = -Math.PI/4; private var theta:Number = Math.PI*3/2; public function ParticleShape3(){ init(); createParticles(); addEventListener(Event.ENTER_FRAME,onEnterframe); } private function init():void{ stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.frameRate = 32; //stage.quality = StageQuality.LOW; stage.fullScreenSourceRect = new Rectangle(0,0,550,400); var perspectiveProjection:PerspectiveProjection = new PerspectiveProjection(); perspectiveProjection.fieldOfView = 60; perspectiveProjection.projectionCenter = new Point(400,300); focalLength = perspectiveProjection.focalLength; addChild(new Bitmap(bmpd,PixelSnapping.NEVER,false)); } private function createParticles():void{ var radius1:Number = 110; var radius2:Number = 50; var s:Number; var t:Number; var sMin:Number = -Math.PI; var tMin:Number = -Math.PI; var sMax:Number = Math.PI; var tMax:Number = Math.PI; var numS:int = 400; var numT:int = 300; var sInc:Number = (sMax - sMin)/numS;// 0.02094395 var tInc:Number = (tMax - tMin)/numT;// 0.01570796 var s0:Number; var t0:Number; var sFuzz:Number = sInc; var tFuzz:Number = tInc; var p:Particle = particle; for(var j:int=0;j -1){ buffer[n] = 0x000000; } var p:Particle = particle; do{ var u:Number = M11*p.x + M12*p.y + cosp*p.z; if(u < fLen){ m = fLen/(fLen-u) ix = int((-sint*p.x+cost*p.y)*m+cx); iy = int((M31*p.x+M32*p.y+sinp*p.z)*m+cy); i = int(ix+iy*bmpd.width); buffer[i] = 0x999999; } p = p.next; }while(p); bmpd.lock(); bmpd.setVector(bmpd.rect,buffer); bmpd.unlock(bmpd.rect); } } }
转载请注明:陈童的博客 » Flash三维粒子之混沌形状3