波紋効果

matsu45122009-08-06



エフェクト処理に波紋を追加
こんな感じ
ソースは右クリックで


結構、綺麗な効果ができた、でもムズイ
理論的なところは後で理解しよう。。。


ソース

private function shade_hamon(ampint:int , wwint:int , refint:int):void
{
	if(target_bmpData == null) return;
	bmpData2 = new BitmapData(target_bmpData.width, target_bmpData.height);
	
	var x:int, y:int;
	var xx:int, yy:int;
	var rr:int, gg:int, bb:int, oo:int;
	var col:Color = new Color(), pixb:Color = new Color(), ncol:Color = new Color();
	var amp:Number, ww:Number;
	var dxx:Number, dyy:Number;
	var kyori:Number;
	var tmp:int;
	var ox:Number, oy:Number;
	var dx:Number, dy:Number, dy2:Number, dz:Number;
	var ref:Number, ddx:Number, ddy:Number;
	var kH:Number;
	var x1:int, y1:int, x2:int, y2:int;

	x1=0;
	y1=0;
	x2=bmpData2.width-1;
	y2=bmpData2.height-1;

	amp=Number(ampint)/100.0;
	ww=Number(wwint);
	ref=Number(refint)/100.0;

	ox=Number(x2-x1)/2.0;
	oy=Number(y2-y1)/2.0;
	adjustLightSourse();
	
	for(y = y1; y <= y2; y++) {
		for(x = x1; x <= x2; x++) {
			dxx=Number(x-x1)-ox;
			dyy=Number(y-y1)-oy;
			//距離
			kyori=Math.sqrt(dxx*dxx+dyy*dyy);
			//偏微分
			dx= -Math.PI*2/ww*amp*Math.sin(Math.PI*2/ww*kyori)*dxx/kyori;
			dy= -Math.PI*2/ww*amp*Math.sin(Math.PI*2/ww*kyori)*dyy/kyori;
			dz= 1.0;
			kH= amp*(Math.cos(Math.PI*2/ww*kyori)+1.0)+10.0;
			ddx=getRefOrg(dx,dz,kH,ref);
			ddy=getRefOrg(dy,dz,kH,ref);
			col.color = target_bmpData.getPixel(int(x+ddx),int(y+ddy));	//画像上の画素情報を取得
			rr=lighting(col.r,dx,dy,dz,dxx,dyy,0.0);
			gg=lighting(col.g,dx,dy,dz,dxx,dyy,0.0);
			bb=lighting(col.b,dx,dy,dz,dxx,dyy,0.0);
			col.r = rr;
			col.g = gg;
			col.b = bb;
			bmpData2.setPixel(x, y, col.color);	// 画像に値をセットする
		}
	}
	
	view.bitmapData = target_bmpData = bmpData2;
	myImage.width = view.width = myImage.width;
	myImage.height = view.height = myImage.height;
}