Flash三维粒子光线变化5
[code lang="as3"]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.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
import flash.geom.Matrix3D;
import flash.geom.PerspectiveProjection;
import flash.geom.Point;
import flash.geom.Rectangle;
import net.everyinch.geom.Particle;
[SWF(width="800",height="600",frameRate="32",backgroundColor="0x000000")]
public class ParticleLight5 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 onScreen:Boolean = false;
private var phi:Number = Math.PI/2;
private var theta:Number = -Math.PI/2;
private var dragging:Boolean = false;
private var offset:Number = 80;
private var targetOffset:Number = 120;
private var targetPhi:Number = phi;
private var targetTheta:Number = theta;
public function ParticleLight5(){
init();
createParticles();
stage.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
addEventListener(Event.ENTER_FRAME,onEnterframe);
}
private function onMouseDown(e:MouseEvent):void{
dragging = true;
}
private function onMouseUp(e:MouseEvent):void{
dragging = false;
}
private function init():void{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.frameRate = 62;
//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 = 50;;
var radius2:Number = 45;
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 = 250;
var numT:int = 350;
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 0) && (i < 480000)){
increment = bmpd.getPixel(ix,iy) & 0xFF;
increment = fadeRate*(u-depth0)+1;
increment = (increment > maxLevel) ? maxLevel : (increment < 0 ? 0 : increment);
level = (color >> 16)+increment;
level = (level > 255)?255:level;
color = (level