<?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.alumican.net &#187; DEVELOPMENT</title>
	<atom:link href="http://blog.alumican.net/category/development/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.alumican.net</link>
	<description>日々の記憶と記録とActionScript とその周辺</description>
	<lastBuildDate>Tue, 20 Jul 2010 16:21:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>マウスイベント発生中に親を変更した場合の挙動</title>
		<link>http://blog.alumican.net/2010/07/21_011724</link>
		<comments>http://blog.alumican.net/2010/07/21_011724#comments</comments>
		<pubDate>Tue, 20 Jul 2010 16:17:24 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1839</guid>
		<description><![CDATA[想定外の挙動だったのでメモ。
MouseEvent.MOUSE_DOWNの発生後にマウスを押したまま対象インスタンスの親インスタンスを変更した場合、つまり別のDisplayObjectContainerにaddChild [...]]]></description>
			<content:encoded><![CDATA[<p>想定外の挙動だったのでメモ。</p>
<p>MouseEvent.MOUSE_DOWNの発生後にマウスを押したまま対象インスタンスの親インスタンスを変更した場合、つまり別のDisplayObjectContainerにaddChildし直した場合の挙動。</p>
<p>予想では、マウスダウン中に別の親にaddChildしてしまうとマウスを離してもMouseEvent.MOUSE_UPは発生しないと思っていたのだけど、普通にイベントが発生した。これを利用すると、たくさんのアイテムの中からドラッグ中のものを一時的に最前面に表示するなどの処理が実装しやすくなる。</p>
<pre><code>//親コンテナ parentA, parentB を作る
var parentA:Sprite = addChild( new Sprite() ) as Sprite;
var parentB:Sprite = addChild( new Sprite() ) as Sprite;

//子オブジェクト child を作り、parentA に配置しておく
var child:Sprite = parentA.addChild( new Sprite() );
child.graphics.beginFill(0x0);
child.graphics.drawCircle(0, 0, 50);
child.graphics.endFill();
child.x = 100;
child.y = 100;

//子オブジェクトに対してイベントを登録する
child.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void {
  trace("down");
  //マウスダウンで parentB の子として addChild し直す
  parentB.addChild(child);
});

child.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent):void {
  //マウスを離すと、マウスダウン時と親が違っていてもちゃんと実行される
  trace("up");
});</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2010/07/21_011724/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>トップページ更新 Cells</title>
		<link>http://blog.alumican.net/2010/07/12_201337</link>
		<comments>http://blog.alumican.net/2010/07/12_201337#comments</comments>
		<pubDate>Mon, 12 Jul 2010 11:13:37 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1807</guid>
		<description><![CDATA[
トップページにコンテンツを追加しました。
» Cells
今回はボロノイ図とパーティクル操作を組み合わせたものとなっています。ボロノイ図のアルゴリズムには高速なFortuneのアルゴリズムを用いています。Fortune [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://alumican.net/#/c/cells"><img src="http://blog.alumican.net/wp-content/uploads/2010/07/cells.jpg" alt="" title="cells" width="478" height="200"/></a></p>
<p>トップページにコンテンツを追加しました。<br />
» <a href="http://alumican.net/#/c/cells">Cells</a></p>
<p>今回はボロノイ図とパーティクル操作を組み合わせたものとなっています。ボロノイ図のアルゴリズムには高速な<a href="http://en.wikipedia.org/wiki/Fortune">Fortuneのアルゴリズム</a>を用いています。Fortuneのアルゴリズムは空間を上から下に走査していきながら、各々のボロノイ母点が作り出す放物線（beach line）同士が交わる点列をボロノイ境界とみなします。</p>
<p>» <a href="http://research.engineering.wustl.edu/~pless/546/lectures/l16.html">アルゴリズム解説</a><br />
» <a href="http://www.cs.hmc.edu/~mbrubeck/voronoi.html">C++版 by Matt Brubeck</a><br />
» <a href="http://blog.controul.com/2009/05/speedy-voronoi-diagrams-in-as3flash/">AS3版 by Controul</a></p>
<p>wonderflに投稿されているkndさんの『<a href="http://wonderfl.net/c/t0iX">Fortuneのアルゴリズムの可視化</a>』が直感的で分かりやすいです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2010/07/12_201337/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PixelBender (.pbj) をActionScriptに埋め込む</title>
		<link>http://blog.alumican.net/2010/07/12_165011</link>
		<comments>http://blog.alumican.net/2010/07/12_165011#comments</comments>
		<pubDate>Mon, 12 Jul 2010 07:50:11 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[wonderfl]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1775</guid>
		<description><![CDATA[まじめにPixelBenderやろうかなと思いつつ、いちいちpbjファイルをロードするのも面倒くさいなと思ったので、ちょっと便利そうなツールを作ってみました。

pbjファイルをローカルからアップロードすると、Pixel [...]]]></description>
			<content:encoded><![CDATA[<p>まじめにPixelBenderやろうかなと思いつつ、いちいちpbjファイルをロードするのも面倒くさいなと思ったので、ちょっと便利そうなツールを作ってみました。</p>
<div style="text-align:center;width:100%;margin-bottom:15px;"><iframe title="Embedded PixelBender Generator - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/gD6k" width="465" height="490" style="border:0px black solid;"></iframe></div>
<p>pbjファイルをローカルからアップロードすると、PixelBenderのコードを内部に埋め込んだActionScriptのクラスを生成します。pbjファイルがパラメータを含む場合は、各パラメータに対して自動的にgetter/setterも用意します。インプットに対しても自動でgetter/setterを生成します。</p>
<p>このツールの利点としては</p>
<ul>
<li>コンパイル時にPixelBenderのコードを含めることができるので、pbjファイルを外部読み込みする必要が無くなる</li>
<li>pbjファイルにどのようなパラメータやインプットを設定すればいいのか分かる</li>
</ul>
<p>といったことがあります。wonderflに投稿する際にメインのコードとPixelBenderをひとつのファイルにまとめたり、パラメータやインプットの指定ミスを減らせることができるかと思います。<br />
<span id="more-1775"></span><br />
エンコード/デコード処理はこのようになっています。</p>
<pre><code>//pbjファイル → 埋め込みコード
function encode(bytes:ByteArray):Array {
    var code:Array = new Array();
    bytes.position = 0;
    while (bytes.bytesAvailable) {
        code.push(bytes.readByte());
    }
    return code;
}

encode(loader.data);</code></pre>
<pre><code>//埋め込みコード → Shaderインスタンス
function decode(code:Array):ByteArray {
    var bytes:ByteArray = new ByteArray();
    for (var i:uint = 0, l:uint = code.length; i < l; ++i) {
        bytes.writeByte(code[i]);
    }
    return bytes;
}

var shader:Shader = new Shader( decode(code) );</code></code></pre>
<p><strong>おまけ</strong><br />
結局使わなかったのですが、このツールを作るにあたりpbjファイルをディスアセンブルするクラスをC++からASに移植しました。<br />
» <a href="http://www.kaourantin.net/2008/09/pixel-bender-pbj-files.html">Pixel Bender .pbj files （C++版のディスアセンブラ）</a></p>
<p>当初はpbjファイルをディスアセンブルしてパラメータのgetter/setterを自動生成ｓていたのですが、Shaderインスタンスのdataプロパティを列挙すれば必要な情報を取得できることに、移植完了後に気づきました。なのでディスアセンブラはお蔵入りとなってしまったのですが、せっかくなので置いておきます。使い方はクラスファイルの最初のほうを見てください。<br />
» <a href="http://lab.alumican.net/embedded_pixelbender_generator/PBJDecoder.as">PBJDecoder.as</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2010/07/12_165011/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ActionScriptで変態言語Whitespaceのインタプリタ</title>
		<link>http://blog.alumican.net/2010/07/12_155751</link>
		<comments>http://blog.alumican.net/2010/07/12_155751#comments</comments>
		<pubDate>Mon, 12 Jul 2010 06:57:51 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[Whitespace]]></category>
		<category><![CDATA[wonderfl]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1723</guid>
		<description><![CDATA[何かを作るとき、色々な技術の応用や組み合わせばかりにとらわれている気がして、ActionScriptという言語自体に真剣に向き合ってみようと思ったらいつのまにかWhitespaceという言語に真剣に向き合っていた。な…　 [...]]]></description>
			<content:encoded><![CDATA[<p>何かを作るとき、色々な技術の応用や組み合わせばかりにとらわれている気がして、ActionScriptという言語自体に真剣に向き合ってみようと思ったらいつのまにか<a href="http://compsoc.dur.ac.uk/whitespace/">Whitespace</a>という言語に真剣に向き合っていた。な…　何を言ってるのかわからねーと思うが（ry</p>
<div style="text-align:center;width:100%;margin-bottom:15px;"><iframe title="Whitespace Interpreter - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/gpUu" width="465" height="490" style="border:0px black solid;"></iframe></div>
<p>RunをクリックするとSource Codeに記述したコードが実行され、実行結果がOutputへ出力されます。場合によっては（というかPreset Codeでは Hello, World! 以外全て）入力待ち状態になるのでその際はInputに要求された文字列もしくは数値を入力してSendをクリックします。<br />
<span id="more-1723"></span><br />
<strong>Whitespace？なにそれおいしいの？</strong><br />
Whitespaceは簡単なプログラミング言語です。ただし<span style="color: #eeeeee;">見えない</span>ことを除いては。なぜならばWhitespaceのソースコードは半角スペース、タブ、改行のみで構成されているからです。それ以外の文字は全てコメントとして扱われます。</p>
<p>ちなみに、公式サイトに掲載されているHello Worldのソースです。なんだろうこのドヤ感。<br />
» <a href="http://compsoc.dur.ac.uk/whitespace/hworld.ws">Hello World</a></p>
<p><strong>スタックマシンとしての動作と文法</strong><br />
Whitespaceは記憶領域としてスタック、ヒープというものを使います。ASで言うならばスタックはArray、ヒープはObjectと言ったところでしょうか。スタックは値を一番上に積み上げるか、一番上から取り出すことしかできませんし、値を見るだけでもいちいち取り出さなければいけません。ヒープは任意のラベル（アドレス）に値を保存したり、保存しておいた値を取り出しすことができます。</p>
<pre><code>//スタックのイメージ
stack.push(value);           //値の積み上げ
var value:int = stack.pop(); //値の取り出し

//ヒープのイメージ
heap[address] = value;         //値の保存
var value:int = heap[address]; //値の取り出し</code></pre>
<p>ソースコードは処理命令の羅列となっているので、Whitespaceはソースコードの最初から順番に処理命令を読み取りながら、スタックとヒープを操作してプログラムを実行していきます。ひとつの処理命令は「IMP + コマンド + パラメータ」のセットになっています。それぞれの役割は次のようになっています。</p>
<ul>
<li>IMP ･･･ Instruction Modification Parameterの略で、処理命令の大まかなカテゴリを表します（AS的にはパッケージのようなものです）。</li>
<li>コマンド ･･･ 処理命令の具体的な種類を表します（AS的にはメソッドのようなものです）。</li>
<li>パラメータ ･･･ コマンドを実行するための引数です。コマンドによっては無い場合があります。</li>
</ul>
<p>それぞれの具体的なコードは以下で解説されているので、心の目で見るといいと思います。<br />
» <a href="http://d.hatena.ne.jp/hiroshi128/20100201/1265031426">Whitespace基礎文法最速マスター</a></p>
<p><strong>ソースコード</strong><br />
<a href="http://wonderfl.net/c/gpUu/download">こちら</a>からダウンロードして自由に使ってください。496行目辺りからインタプリタのクラスが記述してあります。本当は正規表現でスマートにやりたかったんですけど、汚くなっちゃいました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2010/07/12_155751/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>遺伝的アルゴリズムで歩行動作獲得への道　～３歩目～</title>
		<link>http://blog.alumican.net/2010/05/11_154025</link>
		<comments>http://blog.alumican.net/2010/05/11_154025#comments</comments>
		<pubDate>Tue, 11 May 2010 06:40:25 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[QuickBox2D]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1658</guid>
		<description><![CDATA[
超マイペースでぼちぼち作っていた、AIで歩行動作を学習しようプロジェクト（１歩目、２歩目）なのですが、先日のイベントでお話したこともあり一段落したので、ひとまずトップページで正式公開することにしました。
» Earth [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://alumican.net/#/c/earthwalker"><img class="alignnone size-full wp-image-1579" title="earthwalker03" src="http://blog.alumican.net/wp-content/uploads/2010/05/earthwalker03.jpg" alt="earthwalker03" width="478" height="200" /></a></p>
<p>超マイペースでぼちぼち作っていた、AIで歩行動作を学習しようプロジェクト（<a href="http://blog.alumican.net/2009/10/29_003222">１歩目</a>、<a href="http://blog.alumican.net/2009/11/11_025133">２歩目</a>）なのですが、<a href="http://blog.alumican.net/2010/03/09_162432">先日のイベント</a>でお話したこともあり一段落したので、ひとまずトップページで正式公開することにしました。</p>
<p>» <a href="http://alumican.net/#/c/earthwalker">Earthwalker</a></p>
<p>今回のアップデートは遺伝的アルゴリズムの最適化、インターフェースの強化、そして<span style="color: #ff0000;">エディタ機能</span>です。</p>
<p>今までは頑張るイモ虫君を見ているだけでしたが、これからは好きな構造の生き物を創って歩かせることができます。誰も見たことのない生き物たちが頑張って歩き方を覚えていく様子を、ほほえましく見守ってあげてください。<br />
<span id="more-1658"></span></p>
<p><strong>エディタ機能</strong><br />
生物の作り方をちょっと説明。真ん中の地球にマウスを持っていくとエディタ機能に入れます。その後、地球の下のほうの「HELP!」にマウスを合わせるとエディタの使い方を見ることができます。基本的には動きの軸となる関節を、棒の体で繋いであげれば完成です。左下のNODEやJOINTは身体構造をあらわしていて、それぞれ関節の数、棒の数になっています。</p>
<p>あまりにパーツの多い生物を作るとPCが重くなっちゃうし、たまに物理演算が崩壊して生き物が飛んでっちゃうので注意ですが、やっとコンテンツとして1ステップ進めることができたかなあ、といった感じです。</p>
<p><strong>学習パラメータ</strong><br />
歩行動作のためのパラメータも少し変えました。<br />
0.5秒ごとに各関節の速度が決められた数値に切り替わるようにして、それを5回繰り返します。1回関節の速度が切り替わる単位を1ステップとします。5ステップをまとめて、1回の歩行動作（＝1サイクル）とします。個体評価は3サイクルでおこないます。計測前の座標と、3サイクル経過後の座標を比べて、どれくらい進んだのかを評価値として遺伝的アルゴリズムを実行します。</p>
<p>左下のSTEPやCYCLEはこの値となっています。ちなみにAGEは世代数、SCOREはその世代の中での最高得点です。それぞれの生き物にくっついてる数字やグラフ表現は個人的な趣味で、中身は適当です、すみません、でも好きなんですこういうの。</p>
<p><strong>今後の予定</strong><br />
このあとどうするかなのですが、まだノープラン。いろんな人の生き物を見れたりするビューアや、レースさせるバトル機能もおもしろそうですし、進化の系譜をまとめて図鑑にするのもいいかも。やりたいことは尽きないですけど、またマイペースに作っていきます。</p>
<p>今、自分が何を作りたいのか、恥ずかしながら模索中です。色々考えてはみるけど、いつも「たくさんの人に喜んでもらいたい」という結論にたどり着きます。僕にとってテクノロジーは大きなキャンバスであり、プログラムは絵筆なのかな。へっぽこプログラマな僕が言うのは何ともおこがましいのですが、音楽や文学や絵画やスポーツで世界中の人を感動させられるなら、プログラムにも何かきっとできるはず。</p>
<p>イベント会場でも、プロジェクタを使ってこいつを設置させてもらったのですが、多くの人に楽しんでいただき、僕が思いもかけないような生き物がたくさん生まれました。そんな生き物たちがだんだんと歩けるようになっていく様子がかわいくて、ただ感動していました（親心によるところも少なからずあると思いますが）。みなさま、どうもありがとうござました。</p>
<p>学習アルゴリズムというコアな技術の軸をぶらさずに、どう表現すればもっと多くの人に楽しんでもらえるのか。イモ虫君にとても勉強させてもらってます。感謝。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2010/05/11_154025/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GEEKs Flash モーションプログラミング</title>
		<link>http://blog.alumican.net/2010/03/09_162432</link>
		<comments>http://blog.alumican.net/2010/03/09_162432#comments</comments>
		<pubDate>Tue, 09 Mar 2010 07:24:32 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1649</guid>
		<description><![CDATA[公式サイトから抜粋
「GEEKs」は自由な発想でテクノロジーを駆使し、モノを作る楽しさと独創性を刺激するセミナーイベントです。
今回のテーマは、Flash ActionScriptによるモーショングラフィックスです。
F [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://event.67.org/geeks/flashmotion/" target="_blank">公式サイト</a>から抜粋</p>
<blockquote><p>「<strong>GEEKs</strong>」は自由な発想でテクノロジーを駆使し、モノを作る楽しさと独創性を刺激するセミナーイベントです。<br />
今回のテーマは、Flash ActionScriptによるモーショングラフィックスです。<br />
Flashにおける、動きのデザイン、インタラクティブデザインには、見る人を魅了して驚かせる効果があります。制作者には、ビジュアルを表現するだけではなく、それを成り立たせる構造やしくみをデザインする技術が必要となります。<br />
本イベントでは、<a href="http://roxik.com/" target="_blank">ROXIK</a> の城戸雅行（きどまさゆき）氏と <a href="http://alumican.net/" target="_blank">alumican.net</a> の奥田透也（おくだゆきや）氏をゲストに迎え、ActionScript 3.0で複雑なモーションプログラムを構築するための、考え方や手法をご紹介いただきます。</p></blockquote>
<p></p>
<p>というわけでロクナナ様のイベントで喋ります。ご一緒させていただくもう一人の登壇者はあの『<a href="http://www.ecodazoo.com/" target="_blank">エコだ動物園</a>』や『<a href="http://www.verbatim.jp/senshuken/" target="_blank">全日本バーベイタム選手権</a>』を手がけられた<a href="http://roxik.com/" target="_blank">ROXIK</a>の城戸さんです。こんなことってあるんですね、すごい。</p>
<p>肝心の話す内容なのですが『Flashを使って自由にやっていいですよ』とのことでしたので、僕は1時間半壇上でニヤニヤしていたいと思います。半分本当で半分冗談です。あまり仕事にすぐには使えないかもだけど、Flash使ったらこんなおもしろそうなことできるよね！そしたらこんなこともできちゃうよね！みたいなことをみんなと考えたいな！！もしよろしければ皆様もFlashを始めた頃の気持ちに戻って、ご一緒にニヤニヤしませんか。<br />
<span id="more-1649"></span></p>
<p><a href="http://event.67.org/geeks/flashmotion/" target="_blank"><img src="http://event.67.org/wps/2010/04/banner_20100423.gif" alt="GEEKs　Flash モーションプログラミング" width="234" height="60" /></a><br />
<span style="color: #ff0000;">なんと募集開始から1日で満席となってしまったようです、ごめんなさい。。。<br />
チケットを逃された方々、もしかしたら今後キャンセル分の空きが出るかもしれないので引き続きチェックお願いしますm(_ _)m</span></p>
<p># 最近告知ばかりですみません。<br />
# 書くネタはいっぱいあるので、新しい職場が落ち着いたらまた再開します。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2010/03/09_162432/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>drawTrianglesで球面マッピング</title>
		<link>http://blog.alumican.net/2009/12/20_014813</link>
		<comments>http://blog.alumican.net/2009/12/20_014813#comments</comments>
		<pubDate>Sat, 19 Dec 2009 16:48:13 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[FlashPlayer10]]></category>
		<category><![CDATA[wonderfl]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1607</guid>
		<description><![CDATA[既視感ありまくりのエントリで恐縮なのですが、今までGraphics.drawTrianglesを使ったことなかったのと、仕事で必要になったので勉強しました。

外部から読み込んだ画像をテクスチャとして球面上にマッピングし [...]]]></description>
			<content:encoded><![CDATA[<p>既視感ありまくりのエントリで恐縮なのですが、今まで<a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/display/Graphics.html#drawTriangles()">Graphics.drawTriangles</a>を使ったことなかったのと、仕事で必要になったので勉強しました。</p>
<div style="text-align:center;width:100%;margin-bottom:15px;"><iframe title="[Study] Sphere using Graphics.drawTriangles - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/4Hj9" width="465" height="490" style="border:0px black solid;"></iframe></div>
<p>外部から読み込んだ画像をテクスチャとして球面上にマッピングしています。<br />
パースはつけていません。<br />
<span id="more-1607"></span><br />
一応最適化ということで、頂点をなるべく重複点させないようにしています。ただし画像の端に対応する頂点が反対側の端と（極に関しては隣とも）うまくマージできずにほったらかしなので、頑張ればもうちょっと減らせると思います。</p>
<p>迷ったのが、多数の3次元座標を Matrix3D を使って一括投影するのに、<br />
<a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/geom/Utils3D.html#projectVectors()">Utils3D.projectVectors</a>と<a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/geom/Matrix3D.html#transformVectors()">Matrix3D.transformVectors</a>があるということ。<br />
前者は2次元座標に、後者は3次元座標に投影してくれる。投影後にzバッファしようと思ったら、projectVectorsは第3引数で渡したuvtのうちtに奥行きが入っているのでそれでソートしてやる。transformVectorsなら3次元座標のzを使えばよろし。</p>
<p>今回は球体ということで、z バッファは必要なかったので（視点と逆向きの法線ベクトルを持つポリゴンのみを描画すればよい）、drawTrianglesの第4引数であるcullingの値を適切に設定することでこっち側向いてるポリゴンだけ描画しました。</p>
<p>具体的にはポリゴンを形成する頂点を時計回りで指定して、球体の内側から外側に向かって面の法線ベクトルを伸ばしてます。このときcullingにTriangleCulling.NEGATIVEを設定すれば、あっち側（視点ベクトルと同じ方向）を向いてるポリゴンは描画されないのでいい感じ。球体を内側から見る場合にはTriangleCulling.POSITIVEにする。</p>
<p>話を戻すと、projectVectorsでもtransformVectorsでもどっちでも良かったので、両方やって速い方を使うことにしたのですけど、両者ほとんど差がない。一瞬transformVectorsのが速い気がしたんだけど多分気のせい。</p>
<p>やってる途中でハマったのが、projectVectorsで投影後のuvt値のうち、t値がどうしても全部1になってしまう問題。これは<a href="http://twitter.com/psyark">psyarkさん</a>に教えてもらって理解。多謝。</p>
<blockquote><p>
@alumican_net 全部1になるのは、第一引数のMatrix3DがProjection行ってないからではないかなー [<a href="http://twitter.com/psyark/status/6766133396">link</a>]</p>
<p>PerspectiveProjection#toMatrix3D使うと計算楽だよ [<a href="http://twitter.com/psyark/status/6766164546">link</a>]</p>
<p>Projection行ってるかどうかは、Vector3Dを変換してwが大きくなるかで分かります。もしくはMatrix3Dの4列目に0以外があるかどうか（これはあまり自信なし） [<a href="http://twitter.com/psyark/status/6766235920">link</a>]</p>
<p>普通はrawData[11]が1とかになる。z→wにするために。 [<a href="http://twitter.com/psyark/status/6766261388">link</a>]
</p></blockquote>
<p>Matrix3Dに<a href="http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/flash/geom/PerspectiveProjection.html">PerspectiveProjection</a>を設定しないとダメらしい。並行投影なのでその辺を端折ったのがいけなかったのか。</p>
<p>最後に、drawTrianglesは意外と重い、期待値が高かっただけに拍子抜け。<br />
限定的な使い方に絞って最適化頑張って、やっとPapervision3Dに勝てるくらい。</p>
<p>描画する頂点を全部まとめて毎フレーム1回のdrawTrianglesに押さえてはいますが、それでも結構くる。しかも残念なことに描画頂点数というよりは、むしろ描画領域が速度に大きく影響している。見えてないポリゴンをdrawTrianglesに渡さないとか色々試してみたけど結果はほとんど変わらず（むしろVectorを作り直すのに時間が余計かかったくらい）。結局画質を落とすのが一番パフォーマンスを上げるという結果になって萎え～。</p>
<p>とはいえdrawTrianglesを使えば簡単にかなりトリッキーなことができるので、使いどころを考えればおもしろい表現ができるはず。まだ完全には理解してないので、もっといい最適化手法がありそう。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/12/20_014813/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ごはんとFlashでライブコーディングやります</title>
		<link>http://blog.alumican.net/2009/11/25_215000</link>
		<comments>http://blog.alumican.net/2009/11/25_215000#comments</comments>
		<pubDate>Wed, 25 Nov 2009 12:50:00 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1597</guid>
		<description><![CDATA[
世界中から猛者の集まるFlashイベントFITC Tokyo 2009の翌日、11月29日にKAYACさん主催のごはんとFlashというイベントがあります。
Flash界隈問わず、色んなクリエイターが色んなクリエイティ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://level0.kayac.com/2009/11/wonderfl_rice_livecoding.php"><img class="alignnone size-full wp-image-1599" title="wonderfl_rice" src="http://blog.alumican.net/wp-content/uploads/2009/11/wonderfl_rice.jpg" alt="wonderfl_rice" width="478" height="200" /></a><br />
世界中から猛者の集まるFlashイベント<a href="http://www.fitc.ca/events/about/?event=104">FITC Tokyo 2009</a>の翌日、11月29日にKAYACさん主催の<a href="http://level0.kayac.com/2009/11/wonderfl_rice_livecoding.php">ごはんとFlash</a>というイベントがあります。</p>
<p>Flash界隈問わず、色んなクリエイターが色んなクリエイティブなことを話しましょうという素敵なイベントなのですが、そこで何故か僕がライブコーディングをすることになりました。</p>
<p>「秋だけに、おいしい素材をつくってください。」というお題で30分間のライブコーディングをするのは<a href="http://wonderfl.net/user/yd_niku">KAYAC道家さん</a>、<a href="http://wonderfl.net/user/clockmaker">Clockmakerさん</a>、<a href="http://wonderfl.net/user/psyark">BOW吉川さん</a>、teamLab河北さんというそうそうたるメンツ、そして何故か<a href="http://wonderfl.net/user/alumican_net">僕</a>という。ねえ、なんで？<br />
<span id="more-1597"></span><br />
人前でコーディングなんかしたことないし、なにより僕には<strong><span style="color: #ff0000;">タッチタイピングが全くできない</span></strong>という笑撃の事実がございます。なので、ウルトラコーディングは他の人に任せて、僕はすみっこで小さい笑いを細かく取っていこうかな、と。</p>
<p>とはいいつつも、出るからにはなんかやろうという事で色々考えて行きますよ～。<br />
さてどうなることやら。</p>
<p>そんなわけで、Flashに関わってる人、Flashに関わってる人に関わりたい人、僕の慌てふためく姿を見て<del>安心</del>応援したい人、神コーディングを見たい人などにおすすめの要注目イベントなのです。僕も、（主に僕以外の）著名人方が何を作るのかとても楽しみです。<br />
定員までまだ若干の余裕があるそうなので、上記リンクから申し込んで、どうぞ気軽に遊びに来てください。</p>
<p>それでは会場で会いましょう。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/11/25_215000/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>退職のお知らせとこれからの抱負</title>
		<link>http://blog.alumican.net/2009/11/21_002352</link>
		<comments>http://blog.alumican.net/2009/11/21_002352#comments</comments>
		<pubDate>Fri, 20 Nov 2009 15:23:52 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1588</guid>
		<description><![CDATA[2009年11月20日をもって、スタイルメントを退職いたしました。
スタイルメントは40人超の比較的大きなデザイン会社であるにもかかわらず、社員同士壁がなく、また社員の勉強を応援するアカデミックな面も持ち合わせている恵ま [...]]]></description>
			<content:encoded><![CDATA[<p>2009年11月20日をもって、<a href="http://www.stylement.co.jp/">スタイルメント</a>を退職いたしました。</p>
<p>スタイルメントは40人超の比較的大きなデザイン会社であるにもかかわらず、社員同士壁がなく、また社員の勉強を応援するアカデミックな面も持ち合わせている恵まれた環境の会社でした。</p>
<p>何も分からないまま新卒として入社し、一年半育てて頂いたご恩を十分にお返しできなかったという点が心残りではありますが、これからの自分と真剣に向き合った結果、まだ中学生だった自分がWebのコンテンツを見て感じたおもしろさや感動の原点を追求することにしました。</p>
<p>自分が感じたシンプルな感動を、自分なりに世の中に再発信できればと思います。</p>
<p>がんばります。</p>
<p>12月1日からは<a href="http://tha.jp/">tha</a>でお世話になります。<br />
これからもどうぞよろしく御願いいたします。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/11/21_002352/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>遺伝的アルゴリズムで歩行動作獲得への道　～２歩目～</title>
		<link>http://blog.alumican.net/2009/11/11_025133</link>
		<comments>http://blog.alumican.net/2009/11/11_025133#comments</comments>
		<pubDate>Tue, 10 Nov 2009 17:51:33 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[QuickBox2D]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1577</guid>
		<description><![CDATA[
どうも間が空いてしまってすいません。
前回の何も学習しなかったバージョンに脳みそを加えて、単純なGAを組み込んできました。ageが世代、fitnessがその世代の生物が記録した中で一番良かった成績です。この数値が上がっ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://lab.alumican.net/earthwalker/02.html"><img src="http://blog.alumican.net/wp-content/uploads/2009/11/earthwalker02.jpg" alt="earthwalker02" title="earthwalker02" width="478" height="200" class="alignnone size-full wp-image-1579" /></a></p>
<p>どうも間が空いてしまってすいません。<br />
<a href="http://blog.alumican.net/2009/10/29_003222">前回</a>の何も学習しなかったバージョンに脳みそを加えて、単純なGAを組み込んできました。ageが世代、fitnessがその世代の生物が記録した中で一番良かった成績です。この数値が上がっていけば学習が成功しているといえます。3匹しか見えていませんが、一応裏側で10匹ほど動いています。</p>
<p>» <a href="http://lab.alumican.net/earthwalker/02.html">Earthwalker Prototype02</a></p>
<p>う～ん、学習してるような、してないような。なんとも微妙な感じです。まだまだ改良が必要です。<br />
GAの基本設定としては、エリート（淘汰や突然変異を受けず、次世代にそのまま残される個体）は生成最優秀の一匹、交配は2点交叉が1ペア、パラメータ化と評価方法は前回に示したとおり。かなり勘です。</p>
<p>ちなみに、今回から描画を<a href="http://nutsu.com/">nutsu</a>さん作の<a href="http://www.libspark.org/wiki/nutsu/Frocessing">Frocessing</a>でおこなっています。生物の体が曲線描画になっているところなんかそうですね。ありがたやありがたや。</p>
<p>見た目が貧相なので、エンジンをバージョンアップしていくと共に、次回はもうちょっとかっこよくなる予定です。思いっきり趣味に走ります。メーターとかグラフをいっぱいつけます。(*ﾟ∀ﾟ)=3 ﾑｯﾊｰ!!。ではまた。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2009/11/11_025133/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
