package{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
import flash.events.MouseEvent;
import org.papervision3d.core.effects.utils.BitmapClearMode;
import org.papervision3d.core.geom.Pixels;
import org.papervision3d.core.geom.renderables.Pixel3D;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.view.BasicView;
import org.papervision3d.view.layer.BitmapEffectLayer;
import org.papervision3d.view.layer.util.ViewportLayerSortMode;
[SWF(width=”800″, height=”600″, frameRate=”31″,backgroundColor=”0x000000″)]
public class Pixel3DTest3 extends BasicView{
[Embed(source=”assets/ten.jpg”)]
private var image:Class;
private var pixels:Pixels;
private var isDown:Boolean;
private var container:DisplayObject3D;
public function Pixel3DTest3(){
super(800, 600, true, true);
init3D();
startRendering();
}
private function init3D():void{
camera.focus=4800;
camera.zoom=2;
camera.z=-6000;
var bfx:BitmapEffectLayer=new BitmapEffectLayer(viewport, 800, 600, true, 0, BitmapClearMode.CLEAR_POST, true, true);
viewport.containerSprite.addLayer(bfx);
bfx.sortMode=ViewportLayerSortMode.Z_SORT;
pixels=new Pixels(bfx);
createPixels();
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
private function createPixels():void{
var bmp:Bitmap=new image();
var bmpd:BitmapData=bmp.bitmapData;
var halfWidth:Number=-bmpd.width >> 1;
var halfHeight:Number=-bmpd.height >> 1;
var focus:Number=camera.focus; //4800
var focusZoom:Number=camera.focus * camera.zoom; //9600
var h:int=0;
var w:int=1;
while (w <= bmpd.width){
h=1;
while (h < bmpd.height){
var xpos:Number=(w + halfWidth) * 2;//
var ypos:Number=-(h + halfHeight) * 2;
var distance:Number=xpos * xpos + ypos * ypos;
var zpos:Number=Math.sin(distance / 3000) * 20;
var scale:Number=focusZoom / (focus + zpos); // scale = fl / (fl+z)
var pixel:Pixel3D=new Pixel3D(0xFF000000|bmpd.getPixel32(w, h), xpos / scale, ypos / scale, zpos);
pixels.addPixel3D(pixel);
h++;
}
w++;
}
container=new DisplayObject3D();
container.addChild(pixels)
scene.addChild(container);
}
private function onMouseUp(event:MouseEvent):void{
isDown=false;
}
private function onMouseDown(event:MouseEvent):void{
isDown=true;
}
protected override function onRenderTick(event:Event=null):void{
if(isDown){
container.localRotationY=viewport.containerSprite.mouseX / 2;
container.localRotationX=viewport.containerSprite.mouseY / 2;
}
super.onRenderTick(event);
}
}
}
[/code]
转载请注明:陈童的博客 » 图片的粒子形式及其变形