2012.02.03 | 

こんばんは。muchoです。
寒い日が続きますね。こんな日はおでんで一杯とか。
そんな夢のような枕詞を置いたところで
今日もはりきっていってみましょう。0時回ってます。

さて今回は前回の続きでnoiseです。
simplex noiseを何回もかけて複雑なnoiseにしようという試みです。
http://www.davidcornette.com/glsl/noise.html
上のサイトに参考画像があるので分かりやすいと思いますが、
ノイズの細かさを変更して何度も計算することで複雑なノイズになります。



	float k = 200;
	float n1 = simplexNoise(vec3(gl_TexCoord[0].x*k*0.005,gl_TexCoord[0].y*k*0.005,time));
	float n2 = simplexNoise(vec3(gl_TexCoord[0].x*k*0.01,gl_TexCoord[0].y*k*0.01,time));
	float n3 = simplexNoise(vec3(gl_TexCoord[0].x*k*0.02,gl_TexCoord[0].y*k*0.02,time));
	float n4 = simplexNoise(vec3(gl_TexCoord[0].x*k*0.03,gl_TexCoord[0].y*k*0.03,time));
	float n5 = simplexNoise(vec3(gl_TexCoord[0].x*k*1.0,gl_TexCoord[0].y*k*1.0,time));
	float n6 = (n1 + n2 + n3 + n4 + n5)*0.2;



こんな感じで5回かけてみました。
n1が一番ゆるくて、n5が一番こまかいです。

さすがに激重かなと思ったのですが、耐えれる速度で動きました。
前回と同じように雲模様的な動画にしてもよかったんですが、
より処理速度が分かるようにと思いカメラ映像に合成してみました。

結局パラメータを調整してノイズを飛ばし気味にしてしまったので、
フラクタル感がいまいちよく分からないですね・・・。

2012.01.29 | 

こんにちは。ってこの時間はこんばんはですかね?
最近ようやくGLSLをさわり始めたmuchoです。
cinderにはPerlin Noiseを生成するPerlinクラスという便利なものがあるんですが、
似たようなことをGLSLでできないだろうか?できない訳ないでしょ!
ということで調べてみたら、noise関数なるものがあることが判明。
しかし、どうもまだ実装されてないらしい・・・。
さらに調べたら、Simplex noiseというアルゴリズムがPerlin Noiseよりよさげで、
さらにSimplex noiseをGLSL化してくれてる人がっ!
https://github.com/ashima/webgl-noise

こりゃあっさり行くんじゃね?と思ったら
さすがGLSL若葉マークのmuchoはごっついはまりました。
そもそも座標変換に使いたかったので、
Vertex Shaderの方で計算させようとしたんですが、
なぜかうまく行きませんでした。

なんじゃこりゃ。
x,yのパラメーターがうまく渡ってないようなのですが、
原因究明には至らず・・・。

そこで、Fragment Shaderで計算させたらこれまたなぜかうまく行った。

高速ですごいことしてるはずなのに全然すごく見えない不思議!

これのソースが以下。と言っても上記のリンク先から移植しただけです。
(続きを読む...)

2012.01.21 | 

だいぶ遅くなりましたが、ようやくキネクトいじれるようになりました。
とりあえず今回はOpenNiを利用したCinder-Kinectを使用してみました。

getDepthImage()で640x480のグレースケールの深度イメージが取得できます。
getDepthData()で最大0xffffまでの数値が640x480個の配列で取得できます。
有効距離はだいたい1m〜10m程度(?)
近すぎると正確なデータが返ってきません。
getDepthData()で取得したデータを映像化してみました。
.H264のmovをvimeoにアップしてみたんですが、
画質の劣化の凄さにびっくり。
アップするときに設定とかあるのかも。
初vimeoなのでよくわかりませんでした。

2012.01.11 | 

こんばんはmuchoです。
今日知ったんですが、addFrameScriptなる隠しメソッド?
があるとのこと

public function addFrameScript(frame:uint, notify:Function):void

言語バージョン : ActionScript 3.0
Playerのバージョン : Flash Player 9

指定したフレームにスクリプトを追加します。

こんな技が・・・もしかして使うかも?
ラベルでも飛びたいだろうということでクラスを作ってみました。
AddLabelScript.as



package  
{
	import flash.display.FrameLabel;
	import flash.display.MovieClip;
	import flash.display.Scene;

	public function AddLabelScript(mc:MovieClip, label:*, func:Function = null, arg:Array = null):void
	{
		var frms:Array = [];
		var f:Function;
		if(func != null){
			f = function():void{ func.apply(mc, arg); };
		}

		if (label is Number) {
			frms.push(int(label));
		} else if(label is String) {
			var ss:Array = mc.scenes;
			for each(var s:Scene in ss) {
				var ls:Array = s.labels;
				for each(var l:FrameLabel in ls) {
					if (l.name == label) {
						frms.push(l.frame);
					}
				}
			}
		}

		for (var i:int = 0; i < frms.length; i++ ) {
			var frm = frms[i];
			if (frm > 0 && frm <= mc.totalFrames) {
				mc.addFrameScript(frm, f);
			}
		}
	}
}

使うときは
AddLabelScript(this, "label1", function() {
	trace("label1 is "+ currentFrame);
});
とか
AddLabelScript(mc, this.totalFrames, function() {
	trace("last frame");
	this.stop();
	//ここでのthisはfunctionを埋め込んだmc
});


2012.01.07 | 

This movie requires Flash Player 9

今回はいまさら感たっぷりな話です。おとなしくFROCESSING使えよって話です。
そんな話なんですが、こんばんはmuchoです。
RGBを個別に設定したり、16進数で設定したり、
その逆がしたかったりしたのでColorクラスなんぞ作ってみました。
欲を出してついでにHSVで設定したり、
その逆も出来るようにしてみようとしたら
ちょっとはまりました。
はまったのはHSVからRGBに変換するところです。
(続きを読む...)