DisplacementMapFilterの練習2 ボヨンボヨン hacker_szoe5.. forked:0favorite:1lines:110license : MIT License modified : 2010-06-25 23:05:27 Embed Tweet package { import flash.display.*; import flash.geom.*; import flash.utils.*; import flash.events.*; import flash.display.MovieClip; import flash.geom.Point; import flash.utils.Timer; import flash.filters.DisplacementMapFilterMode; import flash.filters.DisplacementMapFilter; [SWF(width=465,height=465,backgroundColor=0xffffff,frameRate=45)] import flash.filters.BevelFilter; public class FlashTest extends Sprite { public var w:Number=465; public var h:Number=465; public var shape:Ball; public var bmpd:BitmapData; public var bmp:Bitmap; public var ctf:ColorTransform; public var mtx:Matrix; public var bevel:BevelFilter; public var myDisplacementMap:DisplacementMapFilter; //perlinNoise用パラメーター public var rate:Number; public var octave:uint; public var ramdomSeed:int; public var stitch:Boolean; public var fractal:Boolean; public var channelOptions:uint; public var grayScale:Boolean; public var offsets:Array; public var v:int; public var pointA:Point; public var pointB:Point; public var vx:Number=0; //DisplacementMapFilter用パラメーター public var mapPoint:Point; public var mapX:uint; public var mapY:uint; public var mapScaleX:Number; public var mapScaleY:Number; public var mode:String; public var mapColorChannel:uint; public function FlashTest() { // write as3 code here.. init(); } public function init():void{ //背景を作る graphics.lineStyle(105,0xfcaaff); graphics.beginFill(0xffffff,1); graphics.drawRect(0,0,w,h); graphics.endFill(); //ボールを作る shape=new Ball(0xefefff,0x215dd4,0xdfffac,180); addChild(shape); shape.x=w/2; shape.y=h/2; //ビットマップデータとビットマップを作る bmpd = new BitmapData(shape.width,shape.height,false,0xffffff); bevel=new BevelFilter(20,120,0xdddddd,0.6,0x111162,0.6,45,45); bmpd.generateFilterRect(bmpd.rect,bevel); bmp=new Bitmap(bmpd); //フィルター用配列を作る filters=new Array(); //perlinNoise用パラメーターを作る rate=1/20; octave=2; ramdomSeed=20; stitch=false; fractal=true; channelOptions=7; grayScale=false; //offsets=new Array(); //pointA=new Point(v,0); //pointB=new Point(v,0); offsets=["pointA","pointB"]; //DisplacementMapFilter用パラメーターを作る mapPoint=new Point(0,0); mapX=BitmapDataChannel.GREEN; mapY=BitmapDataChannel.BLUE; mapScaleX=100; mapScaleY=100; mode=DisplacementMapFilterMode.COLOR; addEventListener(Event.ENTER_FRAME,wave); } public function wave(e:Event):void{ //ビットマップデータにノイズを設定 bmpd.perlinNoise(shape.width,shape.height,octave,ramdomSeed,stitch,fractal,channelOptions,grayScale,[new Point(0,v),new Point(0,v)]); //DisplacementMapFilterにperlinNoiseをかけたbmpdを設定 myDisplacementMap=new DisplacementMapFilter(bmpd,mapPoint,mapX,mapY,mapScaleX,mapScaleY,mode,0xf18a92,0); //ボールにフィルターを設定 shape.filters=[myDisplacementMap,bevel]; v+=10; } } } import flash.display.*; import flash.geom.Matrix; class Ball extends Sprite{ public var type:String; public var colors:Array; public var alphas:Array; public var rations:Array; public var spread:String; public var interpolation:String; public var focalPoint:Number; public var mtx:Matrix; public function Ball(color1:uint,color2:uint,lineColor:uint,r:Number){ //グラデーションのパラメーターを作る //引数1 type=GradientType.RADIAL; //引数2 colors=[color1,color2]; //引数3 alphas=[1,1] //引数4 rations=[0,255]; //引数5 mtx=new Matrix(); mtx.createGradientBox(2*r,2*r,0,0,0);//幅、高さ、方向を指定する角度、水平移動ピクセル数、垂直移動ピクセル数 mtx.translate(-r,-r);//グラデーションの開始位置を中心にもってくる mtx.rotate(Math.PI/4); //引数6 spread=SpreadMethod.PAD; //引数7 interpolation="rgb" //引数8 focalPoint=0//グラデーションの焦点の位置 graphics.beginGradientFill(type,colors,alphas,rations,mtx,spread,interpolation,focalPoint); //図形を描く //graphics.lineStyle(1,lineColor); graphics.drawCircle(0,0,r); graphics.endFill(); } } Code Fullscreen Preview Fullscreen xor DisplacementMapFilter perlinNoise wave type alphas colors BevelFilter width height generateFilterRect filters SpreadMethod.PAD BitmapDataChannel.BLUE BitmapDataChannel.GREEN Matrix endFill GradientType.RADIAL rotate beginGradientFill perlinNoise translate Boolean drawCircle