陈童的博客's Archivers

From everyinch on 2011-10-04 20:21:53

Flash三维粒子之混沌形状3

[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.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);
}
}
}[/code]
<img class="aligncenter size-medium wp-image-480" title="ParticleShape3" src="http://www.everyinch.net/wp-content/uploads/2011/10/ParticleShape3-274x300.jpg" alt="" width="274" height="300" />

查看完整版本: Flash三维粒子之混沌形状3

Tags: Flash, 三维粒子, 混沌


©陈童的博客