« Jitterで赤色検知 | トップページ | ねんぴょー »

2009年6月 9日 (火)

Jitterの赤色検知で遊ぶ。

前回のJitterでの赤色検知を使って、ちょっとした動きを追加。

画面内の赤い部分にパーティクルを発生させたいだけなんだけど、これが難しい。。
Flashだったら簡単にできるのになあ。単に俺が理解してないだけなのでこのソフトが悪いわけではないんだけども。

jit13

jit13_patch

1.処理軽減
MAX/MSPだったらパーティクルたくさんあっても軽い、みたいな先入観があったけど
そのへんはちゃんと作らないとやっぱり重くなるね。
カメラの取得サイズが160x120の場合19200となるわけで、それ全部パーティクルにしたらそれなりに重いか。

前回の赤色検知では160x120でやってたけど、そこはそのまま使いつつ、その後にサイズを小さくします。

jit.matrix 1 float32 20 15 @planemap 1

新しくMatrixを作ります。
赤色検知では最初にカメラの取得があるのでARGBの4つのplaneが存在してたけど、
最終的に使うのは赤の部分だけなので、新しいMatrixはplaneを1個だけにします。
「@planemap 1」で渡されたMatrixのplaneの1のやつ(0から始まるので2番目)がコピーされます。
とりあえずこれでデータ的には4分の1になるのかなと。
サイズは「20 15」としました。8分の1に圧縮されます。セル数的には64分の1。
セル数は300になり、この300個分のパーティクルを作るようにします。

2.パーティクル
「jit.gl.mesh」を使います。
2つあるのは四角を表示する用と、それらをつなぐラインを表示する用になってます。
@draw_mode が違うだけで他は同じです。

3.条件分岐
先ほど小さくしたmatrixの各セルごとに値を調べます。
その値が0.001より大きいときはその座標に向かってパーティクルは動き、
そうでない場合は真ん中に戻るようにしたいので、条件分岐をしたいなと。
最初は「if文なんてねーだろ」って思っていろいろ調べちゃったけど、普通にありました。

if $f1 > 0.001 then $i2 $i3 $f1 bang else 10 7.5 0. bang

$f1=1つめのインレットに渡される値=赤色の値
$i2=セルのX座標
$i3=セルのY座標
です。
「$f1」の「f」はfloatを意味してるっぽいです。
ここを最初「$i1」としてたら出力結果が整数にまるめられちゃって、if文で小数点ダメなのかって諦めかけてしまいました。。

この文は、
$f1が0.001より大きかったら「$i2 $i3 $f1 bang」というリストを返し、
そうでない時は「10 7.5 0. bang」というリストを返します。
「10 7.5 0.」は真ん中に来させるための値です。
「bang」はその後のcounterを動かすためのものです。

4.表示用Matrixの作成
300個のパーティクルに使う座標を格納するためのMatrixを作ります。
サイズは300x1です。XYZの値があるのでplaneは3つです。
1つめのplaneにX座標、2つめにY座標、3つめにZ座標を格納します。

その前に「setcell $1 0 val $2 $3 $4」というメッセージを作り、このMatrixへ渡してあげることで各セルへ値を入れていきます。

その前の部分では各値の調整をし、格納するセルのX座標を「counter」を使って制御して
packでリストにまとめています。
このへんはすごく頭を使いました。もっと楽な方法、速い方法があるはず。

5.動きをスムーズに。
「4」のMatrixを「jit.gl.mesh」に渡す時に「jit.slide」を通すことで、位置がパッと変わるのではなく、滑らかに動くようにします。
@slide_upはおそらく値が大きくなる時の変化の速さ、
@slide_downはおそらく値が小さくなる時の変化の速さだと思います。
よくFlashで簡単なイージングをかける時に、
this._x += (_xmouse - this._x) / 10;
などとしたりしますが、この式の「10」に相当するような感じです。
つまり値が小さいほど動きは速くなり、大きいほど遅くなります。

という感じで作ってみましたが、実際に動かしてみると赤よりもオレンジや黄色に反応しやすい。。
カメラの性能もあるけど映像が暗くなってしまうので、単に赤いものだと暗くなりやすいっぽい。黄色とかオレンジのほうが明るいので取得しやすい。
その前に赤色検知のやり方も微妙なんだけども。

カメラはどういうのがいいのかねー。

|

« Jitterで赤色検知 | トップページ | ねんぴょー »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: Jitterの赤色検知で遊ぶ。:

« Jitterで赤色検知 | トップページ | ねんぴょー »