<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog ViolentCoding &#187; Fluid</title>
	<atom:link href="http://violentcoding.com/blog/tag/fluid/feed" rel="self" type="application/rss+xml" />
	<link>http://violentcoding.com/blog</link>
	<description>for more violent coder</description>
	<lastBuildDate>Tue, 18 Aug 2009 06:11:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>[Flash]流体っぽいのを作ろうと思った（２）</title>
		<link>http://violentcoding.com/blog/2008/07/29/archives/136</link>
		<comments>http://violentcoding.com/blog/2008/07/29/archives/136#comments</comments>
		<pubDate>Mon, 28 Jul 2008 17:59:28 +0000</pubDate>
		<dc:creator>e_s_jp</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[Fluid]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[source]]></category>

		<guid isPermaLink="false">http://violentcoding.com/blog/?p=136</guid>
		<description><![CDATA[
[Flash]流体っぽいのを作ろうと思ったの解説。


下のサンプルでどんな DisplacementMapFilter で流体っぽい動きになってるか試しみて、ソースを見た方がわかると思います。

&#160;
_ca [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://violentcoding.com/blog/2008/07/26/archives/135">[Flash]流体っぽいのを作ろうと思った</a>の解説。
</p>
<p>
下のサンプルでどんな DisplacementMapFilter で流体っぽい動きになってるか試しみて、ソースを見た方がわかると思います。
</p>
<p>&nbsp;</p>
<p><li><strong>_canvasBmpData</strong> : BitmapData <br />
描画用のBitmapData。Bitmap化し、BlurFilterをかけてる。
</li>
<pre class="brush: as3;">
_canvasBmpData = new BitmapData(MAP_WIDTH, MAP_HEIGHT, false, 0x000000);
var canvasBmp : Bitmap = new Bitmap(_canvasBmpData);
canvasBmp.filters = [new BlurFilter(4, 4, 1)];
</pre>
</p>
<p><li><strong>_mapBmpData</strong> : BitmapData <br />
描画用の _canvasBmpData に適用する DisplacementMapFilter (_displaceMapFilter) の mapBitmap。<br />
<strong>BlurFilterのかかった流体用マップ _fluidBmp</strong> が draw() される。(ので、結局 _fluidBmpと同じ見た目 )
</li>
<pre class="brush: as3;">
_displaceMapFilter = new DisplacementMapFilter();
_displaceMapFilter.mapBitmap = _mapBmpData;
</pre>
</p>
<p><li><strong>fluidMapBmpData </strong>: BitmapData<br />
流体用マップ(  _fluidBmp  )の元にする FluidMap クラスで計算した結果の BitmapData<br />
_fluidBmp 用の BitmapData となる。
</li>
</p>
<p>&nbsp;</p>
<p><div style="text-align: center;">
<embed width="620" height="650" menu="true" loop="false" play="false" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" src="http://violentcoding.com/blog/wp-content/uploads/flash/FluidSample_param.swf"></embed><hints id="hah_hints"></hints>
</div>
</p>
<p>&nbsp;</p>
<p>
ドラッグすると FluidMap クラスで計算した結果を _fluidBmp として、DisplacementMapFilter の mapBitmap である _mapBmpData に draw() する。</p>
<pre class="brush: as3;">
// FluidMap : update
fluidMapBmpData = _fluidMap.updateMap();
_fluidBmp.bitmapData = fluidMapBmpData;

// update _mapBmpData
_mapBmpData.draw(_fluidBmp, _fluidBmp.transform.matrix);
</pre>
</p>
<p>
DisplacementMapFilter の内容が変わったので _canvasBmpData に DisplacementMapFilter を繰り返し適用してやることで、描画が変化しつづける。（ことをEnterFrameでやってる。）</p>
<pre class="brush: as3;">
//updateDisplaceMapFilter(_canvasBmpData, _displaceMapFilter);で以下の処理
var sourceRect : Rectangle = _canvasBmpData.rect;
var destPoint : Point = new Point(sourceRect.left, sourceRect.top);
_canvasBmpData.applyFilter(_canvasBmpData, sourceRect, destPoint, _displaceMapFilter);
</pre>
</p>
<p>&nbsp;</p>
<p>
FluidMap では縦横サイズとグリッドのサイズを指定して、各グリッドのFluid計算用のデータ FluidMapDataを2次元配列に格納する。
</p>
<p>
例えば、300×300でグリッドのサイズを「10」としたら、30×30＝900の各グリッドに対して、Fluidの計算をしてるわけ。仮にグリッド無しでsetPixelしようとすると90000の処理になっっちゃう。
</p>
<p>
さらにその各グリッドの持つのXY方向のベクトル値を算出するために、隣接する６個のグリッドの値を使うのだけど、その取得にはまたその2次元配列を使うことになるわけで・・・。</p>
<p>
その計算をEnterFrameで行っているわけだから、処理も遅くなる。
</p>
<p>&nbsp;</p>
<p>
Fluidの計算自体は Glen Murphy氏のFluidコードのほぼそのまま。超省略な画像を置いておくので、これ見ながらソースを見た方が早いと思います。<br />
<img src="http://violentcoding.com/blog/wp-content/uploads/2008/07/fluidmap.gif" alt="" title="fluidmap" width="500" height="250" class="aligncenter size-full wp-image-177" />
</p>
<p>
必要なのはX方向とY方向の移動量（xVelとyVel）。それをDisplacementMapの色設定に使って、グリッドのサイズでマップ用のBitmapDataを作ってあげる。（色のFadeOutは強制的に色の値を変えちゃってるけど）
</p>
<p>
CalcPressure.as の「0.20」のところをGlen Murphy氏のFluidコードの通りに「0.25」にしてやると、波紋？な揺れが際立つよ。
</p>
<p>&nbsp;</p>
<p>ソースは前回と同じ。</p>
<p>ソース1：<a href="http://violentcoding.com/blog/download-manager.php?id=11">FluidSample.zip</a><br />
ソース2：<a href="http://violentcoding.com/blog/download-manager.php?id=12">FluidSample_param.zip</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://violentcoding.com/blog/2008/07/29/archives/136/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Flash]流体っぽいのを作ろうと思った</title>
		<link>http://violentcoding.com/blog/2008/07/26/archives/135</link>
		<comments>http://violentcoding.com/blog/2008/07/26/archives/135#comments</comments>
		<pubDate>Fri, 25 Jul 2008 17:54:34 +0000</pubDate>
		<dc:creator>e_s_jp</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[Fluid]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[source]]></category>

		<guid isPermaLink="false">http://violentcoding.com/blog/?p=135</guid>
		<description><![CDATA[
流体っぽいのをProcessing.orgのLearingにあるGlen Murphy氏のFluidコードを参考に作ろうと思った。

&#160;

Fluid \ Learning \ Processing 1.0  [...]]]></description>
			<content:encoded><![CDATA[<p>
流体っぽいのをProcessing.orgのLearingにあるGlen Murphy氏のFluidコードを参考に作ろうと思った。
</p>
<p>&nbsp;</p>
<p>
<strong>Fluid \ Learning \ Processing 1.0 (BETA)</strong><br />
<a href="http://processing.org/learning/topics/fluid.html">http://processing.org/learning/topics/fluid.html</a>
</p>
<p>
Glen Murphy氏のコードは<a href="http://bodytag.org/">bodytag.org</a>の「FLUID3」とか、<a href="http://glenmurphy.com/projects/">Glen Murphy氏のページ</a>にもあるやつ。</p>
<p>
Glen Murphy氏のページのほうでは「Fluid3」のリンク先が「Smoke2」と入れ替わっちゃたりしていますけど。
</p>
<p>&nbsp;</p>
<p>
このProcessingのコードをほぼそのままASでやっているサンプルはPapervison3Dに関わってるRalph Hauwert氏のところでダウンロードできて試せます。</p>
<p>
若干コンパイルエラーがでますけど（voidがVoidだったりとか）、それを解消していけばすぐ動きました。
</p>
<blockquote><p>
<strong>Fluid Dynamics : AS3 Source Code.</strong><br />
<a href="http://www.unitzeroone.com/blog/2005/10/25/fluid-dynamics-as3-source-code/">http://www.unitzeroone.com/blog/2005/10/25/fluid-dynamics-as3-source-code/</a>
</p></blockquote>
<p>&nbsp;</p>
<p>
最初は、正統に流体シミュレーションを調べてからなんてちょっと思ったけど、<a href="http://ja.wikipedia.org/wiki/%E3%83%8A%E3%83%93%E3%82%A8-%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%82%B9%E6%96%B9%E7%A8%8B%E5%BC%8F">ナビエ-ストークス方程式</a>を理解して・・・なんて、数学のミレニアム懸賞問題とか理解できるわけありません。</p>
<p>
高卒と同時に数学なんて忘れちゃって、四則演算以外の数学記号を見るだけでも嫌なのに。
</p>
<blockquote><p>
<strong>Fluid Simulation for Computer Animation</strong><br />
<a href="http://www.cs.ubc.ca/~rbridson/fluidsimulation/">http://www.cs.ubc.ca/~rbridson/fluidsimulation/</a>
</p></blockquote>
<p>&nbsp;</p>
<hr />
<p>ということで、Glen Murphy氏のProcessingコードをベースにDisplacementMapFilterを使う方法でやってみたのがこれ。</p>
<p>&nbsp;</p>
<p>一度クリックしてからドラッグするとFluidっぽい動きします。そして今回も例によって負荷高めなのです。一度始めると止める事はしません。ソースを置いとくので、ダウンロードしてから試した方が無難です。</p>
<p>それと、Macの場合はFlashPlayer 10で見た方が良いはずです。FlashPlayer 9で作っていますが、FlashPlayer 10では描画速度が速くなってるし（Windows環境と比べてまともになった感じ）。</p>
<p><div style="text-align: center;">
<embed width="310" height="310" menu="true" loop="false" play="false" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" src="http://violentcoding.com/blog/wp-content/uploads/flash/FluidSample.swf"></embed><hints id="hah_hints"></hints>
</div>
</p>
<p>&nbsp;</p>
<p>内容の解説は<a href="http://violentcoding.com/blog/2008/07/29/archives/136">[Flash]流体っぽいのを作ろうと思った（２）</a>で。ソースは置いとく。</p>
<p>ソース1：<a href="http://violentcoding.com/blog/download-manager.php?id=11">FluidSample.zip</a><br />
ソース2：<a href="http://violentcoding.com/blog/download-manager.php?id=12">FluidSample_param.zip</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://violentcoding.com/blog/2008/07/26/archives/135/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

