グロっぽいPerlinNoise
パラメーターとか調整。
/*
* パラメーターとか調整。
*/
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.ConvolutionFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
/**
* グロさを追求しきれなかったPerlinNoise
*
* @author Hiiragi
*
* 一応警告出してますが、大したことはないです。
*
* BitmapData.perlinNoiseの引数にfractalっていうのがあるんですが、それをfalseにしておくと
* キモい感じのノイズになるので、なんか内蔵っぽくならないかなと思ったらあんまりうまくいかなかったという。
*
* 誰かforkでグロくしてくれる人を募集。
*
*/
[SWF(width = "465", height = "465", frameRate = "30", background = "0x0")]
public class Organ extends Sprite
{
private var _perlinNoiseBmpd:BitmapData;
private var _cf:ConvolutionFilter;
private var _warningText:TextField;
public function Organ()
{
if (stage) init();
else this.addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
_perlinNoiseBmpd = new BitmapData(this.stage.stageWidth, this.stage.stageHeight, false);
this.addChild(new Bitmap(_perlinNoiseBmpd));
var mtxArray:Array = [-5/25, -5/25, -5/25, -5/25, -5/25,
-5/25, -5/25, -5/25, -5/25, -5/25,
-5/25, -5/25, 1+24*5/25, -5/25, -5/25,
-5/25, -5/25, -5/25, -5/25, -5/25,
-5/25, -5/25, -5/25, -5/25, -5/25];
_cf = new ConvolutionFilter(5, 5, mtxArray);
_warningText = new TextField();
_warningText.autoSize = TextFieldAutoSize.LEFT;
_warningText.text = "閲覧注意かも(Clickで描画)";
_warningText.setTextFormat(new TextFormat(null, 25));
_warningText.x = this.stage.stageWidth / 2 - _warningText.width / 2;
_warningText.y = this.stage.stageHeight / 2 - _warningText.height / 2;
this.addChild(_warningText);
this.stage.addEventListener(MouseEvent.CLICK, onClickHandler);
}
private function onClickHandler(e:MouseEvent):void
{
if (_warningText.visible) _warningText.visible = false;
_perlinNoiseBmpd.lock();
_perlinNoiseBmpd.perlinNoise(
_perlinNoiseBmpd.width / 5, _perlinNoiseBmpd.height / 4,
6, Math.random() * int.MAX_VALUE, true, false, 7, true);
_perlinNoiseBmpd.applyFilter(_perlinNoiseBmpd, _perlinNoiseBmpd.rect,
new Point(), _cf);
_perlinNoiseBmpd.colorTransform(_perlinNoiseBmpd.rect,
new ColorTransform(2.3, 0.9, 0.9, 1, 50, 0, 0));
_perlinNoiseBmpd.unlock();
}
}
}