« げしゅたると | メイン | 遅延委譲のお話 »

CHRONO VIEWER

ウェブカム映像の時空間を歪めましょなFlash作品 CHRONO VIEWER を公開しました。
ウェブカム必須です。
といっても元ネタがあります。

Flashじゃ到底重くて話にならないと思ってたけど、昨夜糸口を見つけてスクリプトごりごり。
連続した時間のビットマップを保持しつつ、さらにそれをマスクで重ねるとかだと高負荷でファンが唸り出しますが、それを BitmapData.scrollと数回の BitmapData.copyPixels、さらに DisplacementMapFilter で一発処理することで劇的に軽くなりました。
それでも結構重いんですけどね・・・

ウェブカムの前で変顔してみたり、グーチョキパーしてみたりしながら時空間の歪みをグリグリ味わってみてください。
以下、技術的なこと。

アクセス後に表示される映像の配列は一枚のBitmapDataです。
これの右端1列をcopyPixelsで保持しておいて、全体を映像の大きさ分だけ右に一度scrollさせます。
さらに保持しておいたBitmapDataを今度は左端に一段だけ下げてcopyPixelsで貼り付け、最後に左上の1マスにウェブカムの最新映像をdrawすれば1単位時間進んだ映像群の一枚絵が得られるというわけです。

そして次にクリック&ドラッグによる歪み生成ですが、上記の手順で得られた1枚絵を有効活用します。
右に進めば進むほど、下に進めば進むほど過去の映像を参照しているということは、特定の領域だけ過去の映像に差し替えるには映像の縦横サイズ分だけずらせばいいということになります。
ここで DisplacementMapFilter の出番です。

映像をクリックし続けると、そのマウス座標を中心とする正円を次々に生成するようにしておき、生成順に微妙に色を変化させていきます。
そしてそれらの円をまとめてdrawし、置き換えマップを手に入れます。
この置き換えマップによって移動する量を、映像の縦横サイズぴったりになるように各種パラメータを調整するのですがここでは割愛します。

ちなみに、ここで画質高だと置き換えマップ生成時に円の境界にアンチエイリアスがかかって色が変わってしまうので、画質低にしておきます。
タイトルのテキストとかどうしようと思っていたのですが、ちょうど fladdict さんとこで有益なエントリが上がっていたので参考にさせてもらいました。

トラックバック

このエントリーのトラックバックURL:
http://void.heteml.jp/mt/mt-tb.cgi/29

コメントを投稿

あわせて読みたい