<?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>note.x &#187; 検索結果:  &#187;  collada</title>
	<atom:link href="http://blog.r3c7.net/?s=collada&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.r3c7.net</link>
	<description>やってみたコト、行ったトコ、使ってみたモノなどを淡々と記録しています。</description>
	<lastBuildDate>Mon, 26 Jul 2010 05:39:23 +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>Take the Blender</title>
		<link>http://blog.r3c7.net/?p=433</link>
		<comments>http://blog.r3c7.net/?p=433#comments</comments>
		<pubDate>Fri, 27 Nov 2009 11:23:12 +0000</pubDate>
		<dc:creator>rect</dc:creator>
				<category><![CDATA[try]]></category>
		<category><![CDATA[blender]]></category>

		<guid isPermaLink="false">http://blog.r3c7.net/?p=433</guid>
		<description><![CDATA[3Dアプリでモデリング・モーション付やって、それをそのままASで扱えたらさぞかし楽しかろうと常々考えてきたにもかかわらず、一向にベストな方法が見つけられないし、出現しそうもないので、自力で色々作り始めてみることにした。
 [...]]]></description>
			<content:encoded><![CDATA[<p>3Dアプリでモデリング・モーション付やって、それをそのままASで扱えたらさぞかし楽しかろうと常々考えてきたにもかかわらず、一向にベストな方法が見つけられないし、出現しそうもないので、自力で色々作り始めてみることにした。</p>
<p>本来、.daeが正しく書き出せて、正しく読み込まれればそれが出来るはずなんだろうけど、現状3dsMAXとかMayaでも持ってない限り可能性が薄い。Unwrap3Dはwin用だし。んで、BlenderのエクスポータでもいじってみようかとColladaの仕様書とか見てみたりするんだけど、これがもーなにがなんだか。</p>
<p>そんなわけで.blend形式。<a href="http://www.atmind.nl/blender/index.html" target="_blank">ファイルフォーマットが公開されてる</a>んで、こいつを手がかりに.blendローダーを作成。バイナリ最高。バージョンによるデータの差異は吸収できてないしメッシュの読み込みだけだけど、2.49bのファイルは問題ないとこまで来た。<br />
いいかげんな3Dエンジンらしきものも自作。ジオメトリパイプラインの実装でつまずきまくって、首吊ろうかと思ったけど何とか動くようになった。まだ何かがオカシイので多分どっかの符号間違えてる。苦労した分、オレオレエンジンの成長が楽しくてしょーがない。擬人化したいぐらい。</p>
<p>ここまでの成果として、Blenderで編集したメッシュが.swf側に即時反映されるビューアを作ってみた。画面右がFlashPlayer。</p>
<p id="blas">
<script type="text/javascript">
var so = new SWFObject("/wp-content/uploads/video/player.swf", "blasv", "504", "269", "10", "#000000");
so.addVariable("file","/wp-content/uploads/video/relationblender.flv");
so.addVariable("image","/wp-content/uploads/video/threlationblender.jpg");
so.write("blas");
</script>
</p>
<p>城戸さんそのまんまなのがアレだしショボすぎて泣けてくるけど、これ、ちゃんと作ればかなり便利かも。swfで実際に表示されるまで分からない部分とかが、モデリングしながら確認できるのはメチャメチャ助かる。</p>
<p>当面は、プレハブみたいな実装の3Dエンジンをもうちょっとマトモなものにしつつ、なんとかしてモーションデータの再生までこぎ着けたい。とか宣言して自分を追い詰めておく。<br />
まぁぼちぼち。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.r3c7.net/?feed=rss2&amp;p=433</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>[Away3D] Away3D 2.4 Feature – Explode</title>
		<link>http://blog.r3c7.net/?p=420</link>
		<comments>http://blog.r3c7.net/?p=420#comments</comments>
		<pubDate>Fri, 21 Aug 2009 06:48:28 +0000</pubDate>
		<dc:creator>rect</dc:creator>
				<category><![CDATA[try]]></category>
		<category><![CDATA[away3d]]></category>

		<guid isPermaLink="false">http://blog.r3c7.net/?p=420</guid>
		<description><![CDATA[ワーカーホリック野郎な日々を送ってる間にAway3Dがバージョンアップ。
Away3d: 2.4 &#038; 3.4 released!
とりあえず地味な機能から試してみる。

ExplodeTest（要：FlashP [...]]]></description>
			<content:encoded><![CDATA[<p>ワーカーホリック野郎な日々を送ってる間にAway3Dがバージョンアップ。<br />
<a href="http://away3d.com/away3d-24-34-released" target="_blank" class="ext-link">Away3d: 2.4 &#038; 3.4 released!</a></p>
<p>とりあえず地味な機能から試してみる。</p>
<p class="photo"><a href="/wp-content/uploads/away3d/geom/main.swf" target="_blank"><img src="/wp-content/uploads/e_explode.jpg" border="0" /></a></p>
<p><a href="/wp-content/uploads/away3d/geom/main.swf" target="_blank" class="ext-link">ExplodeTest</a>（要：FlashPlayer9）</p>
<p>Explodeクラスは、指定したObject3Dインスタンス内の全Faceを位置関係をそのままに、バラバラのMeshやFaceに分解してくれるジオメトリモディファイア。<br />
Away3DはもともとFace単位でvisibleプロパティを持ってるので、表示／非表示をFace単位で行うことができていたけど、Face単位で大きさ変えたりすることはできなかった。その名のとおり、簡易的な爆発表現なんかに使えそうだし、演出面で結構使えるかもしれない。</p>
<p>具体的には以下のようにして使う。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #069;">import</span> away3d.<span style="color: #444;">geom</span>.<span style="color: #444;">Explode</span>;
&nbsp;
- 中略 -
&nbsp;
<span style="color: #699; font-family:Verdana;">//適当なメッシュを用意</span>
<span style="color: #39c; font-weight: bold;">var</span> wcMat:WireColorMaterial = <span style="color: #39c; font-weight: bold;">new</span> WireColorMaterial<span style="color: #444;">&#40;</span>0x0099CC, <span style="color: #444;">&#123;</span>wirecolor:0x00CCFF<span style="color: #444;">&#125;</span><span style="color: #444;">&#41;</span>;
<span style="color: #39c; font-weight: bold;">var</span> sphere:Sphere = <span style="color: #39c; font-weight: bold;">new</span> Sphere<span style="color: #444;">&#40;</span><span style="color: #444;">&#123;</span>material:wcMat, radius:<span style="color: #444;">100</span>, segmentsW:<span style="color: #444;">8</span>, segmentsH:<span style="color: #444;">6</span><span style="color: #444;">&#125;</span><span style="color: #444;">&#41;</span>;
&nbsp;
<span style="color: #699; font-family:Verdana;">//Explodeでメッシュを分解</span>
<span style="color: #39c; font-weight: bold;">var</span> _explode:Explode = <span style="color: #39c; font-weight: bold;">new</span> Explode<span style="color: #444;">&#40;</span><span style="color: #39c; font-weight: bold;">true</span>, <span style="color: #39c; font-weight: bold;">true</span><span style="color: #444;">&#41;</span>;
<span style="color: #39c; font-weight: bold;">var</span> _explodedObj:ObjectContainer3D = _explode.<span style="color: #069;">apply</span><span style="color: #444;">&#40;</span>sphere<span style="color: #444;">&#41;</span> as ObjectContainer3D;
&nbsp;
<span style="color: #699; font-family:Verdana;">//分解されたメッシュが束ねられたObjectContainer3Dをシーンに追加</span>
scene.<span style="color: #444;">addChild</span><span style="color: #444;">&#40;</span>_explodedObj<span style="color: #444;">&#41;</span>;</pre></td></tr></table></div>

<p>Explodeのコンストラクタに渡す引数は以下のようになってる模様。</p>
<ul>
<li><strong>第1引数</strong>：分解したFaceを個別のMeshとして定義するかどうか<br />
	trueなら、Faceの数分Meshが生成される。falseなら、共有していた頂点をFaceの数だけ用意してそれぞれ単独の面として扱えるようにする。</p>
<li><strong>第2引数</strong>：再定義後のMeshの中心点をFaceの重心にもってくるかどうか<br />
	falseなら、元になったObject3Dの原点が中心点のままになる
</ul>
<p>コンストラクタの第1引数をtrueにして、個別のMeshを生成した場合は、</p>
<pre class="code">
for each(var item:Mesh in _explodedObj.children)
{
    item.scaleX = 0.5;
}
</pre>
<p>などとして、それぞれのMeshを制御する。</p>
<p>理屈では、Colladaメッシュにも適用できる。</p>
<p class="photo"><a href="/wp-content/uploads/away3d/geom/daeexplode.swf" target="_blank"><img src="/wp-content/uploads/e_explode2.jpg" border="0" /></a></p>
<p><a href="/wp-content/uploads/away3d/geom/daeexplode.swf" target="_blank" class="ext-link">dae Explode</a>（要：FlashPlayer9）</p>
<p>ただ、現状のExplode.asには、元にしたメッシュがFace単位でマテリアル指定されているような場合、マテリアルが引き継がれないという問題があって、テクスチャが無効になってしまう。そこで、Explode.asを以下のように書き換えることで暫定的に対処した。ついでに「bothsides、backの要素が引き継がれない」という問題にも対処。</p>
<p>Explode.as 61行目</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #069; font-weight: bold;">for</span><span style="color: #444;">&#40;</span>i=<span style="color: #444;">0</span>;i<span style="color: #444;">&lt;</span>loop;++i<span style="color: #444;">&#41;</span><span style="color: #444;">&#123;</span>
&nbsp;
    face = obj.<span style="color: #444;">faces</span><span style="color: #444;">&#91;</span>i<span style="color: #444;">&#93;</span>;
    mesh = <span style="color: #39c; font-weight: bold;">new</span> Mesh<span style="color: #444;">&#40;</span><span style="color: #444;">&#41;</span>;
&nbsp;
    va = <span style="color: #39c; font-weight: bold;">new</span> Vertex<span style="color: #444;">&#40;</span>face.<span style="color: #444;">v0</span>.<span style="color: #444;">x</span>, face.<span style="color: #444;">v0</span>.<span style="color: #444;">y</span>, face.<span style="color: #444;">v0</span>.<span style="color: #444;">z</span><span style="color: #444;">&#41;</span>;
    vb = <span style="color: #39c; font-weight: bold;">new</span> Vertex<span style="color: #444;">&#40;</span>face.<span style="color: #444;">v1</span>.<span style="color: #444;">x</span>, face.<span style="color: #444;">v1</span>.<span style="color: #444;">y</span>, face.<span style="color: #444;">v1</span>.<span style="color: #444;">z</span><span style="color: #444;">&#41;</span>;
    vc = <span style="color: #39c; font-weight: bold;">new</span> Vertex<span style="color: #444;">&#40;</span>face.<span style="color: #444;">v2</span>.<span style="color: #444;">x</span>, face.<span style="color: #444;">v2</span>.<span style="color: #444;">y</span>, face.<span style="color: #444;">v2</span>.<span style="color: #444;">z</span><span style="color: #444;">&#41;</span>;
    uva = <span style="color: #39c; font-weight: bold;">new</span> UV<span style="color: #444;">&#40;</span>face.<span style="color: #444;">uv0</span>.<span style="color: #444;">u</span>, face.<span style="color: #444;">uv0</span>.<span style="color: #444;">v</span><span style="color: #444;">&#41;</span>;
    uvb = <span style="color: #39c; font-weight: bold;">new</span> UV<span style="color: #444;">&#40;</span>face.<span style="color: #444;">uv1</span>.<span style="color: #444;">u</span>, face.<span style="color: #444;">uv1</span>.<span style="color: #444;">v</span><span style="color: #444;">&#41;</span>;
    uvc = <span style="color: #39c; font-weight: bold;">new</span> UV<span style="color: #444;">&#40;</span>face.<span style="color: #444;">uv2</span>.<span style="color: #444;">u</span>, face.<span style="color: #444;">uv2</span>.<span style="color: #444;">v</span><span style="color: #444;">&#41;</span>;
&nbsp;
    mesh.<span style="color: #444;">addFace</span><span style="color: #444;">&#40;</span><span style="color: #39c; font-weight: bold;">new</span> Face<span style="color: #444;">&#40;</span>va, vb, vc, obj.<span style="color: #444;">material</span> as ITriangleMaterial, uva, uvb, uvc<span style="color: #444;">&#41;</span><span style="color: #444;">&#41;</span>;
    _container.<span style="color: #444;">addChild</span><span style="color: #444;">&#40;</span>mesh<span style="color: #444;">&#41;</span>;
<span style="color: #444;">&#125;</span></pre></td></tr></table></div>

<p>これを、</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #069; font-weight: bold;">for</span><span style="color: #444;">&#40;</span>i=<span style="color: #444;">0</span>;i<span style="color: #444;">&lt;</span>loop;++i<span style="color: #444;">&#41;</span><span style="color: #444;">&#123;</span>
&nbsp;
    face = obj.<span style="color: #444;">faces</span><span style="color: #444;">&#91;</span>i<span style="color: #444;">&#93;</span>;
    mesh = <span style="color: #39c; font-weight: bold;">new</span> Mesh<span style="color: #444;">&#40;</span><span style="color: #444;">&#41;</span>;
&nbsp;
    va = <span style="color: #39c; font-weight: bold;">new</span> Vertex<span style="color: #444;">&#40;</span>face.<span style="color: #444;">v0</span>.<span style="color: #444;">x</span>, face.<span style="color: #444;">v0</span>.<span style="color: #444;">y</span>, face.<span style="color: #444;">v0</span>.<span style="color: #444;">z</span><span style="color: #444;">&#41;</span>;
    vb = <span style="color: #39c; font-weight: bold;">new</span> Vertex<span style="color: #444;">&#40;</span>face.<span style="color: #444;">v1</span>.<span style="color: #444;">x</span>, face.<span style="color: #444;">v1</span>.<span style="color: #444;">y</span>, face.<span style="color: #444;">v1</span>.<span style="color: #444;">z</span><span style="color: #444;">&#41;</span>;
    vc = <span style="color: #39c; font-weight: bold;">new</span> Vertex<span style="color: #444;">&#40;</span>face.<span style="color: #444;">v2</span>.<span style="color: #444;">x</span>, face.<span style="color: #444;">v2</span>.<span style="color: #444;">y</span>, face.<span style="color: #444;">v2</span>.<span style="color: #444;">z</span><span style="color: #444;">&#41;</span>;
    uva = <span style="color: #39c; font-weight: bold;">new</span> UV<span style="color: #444;">&#40;</span>face.<span style="color: #444;">uv0</span>.<span style="color: #444;">u</span>, face.<span style="color: #444;">uv0</span>.<span style="color: #444;">v</span><span style="color: #444;">&#41;</span>;
    uvb = <span style="color: #39c; font-weight: bold;">new</span> UV<span style="color: #444;">&#40;</span>face.<span style="color: #444;">uv1</span>.<span style="color: #444;">u</span>, face.<span style="color: #444;">uv1</span>.<span style="color: #444;">v</span><span style="color: #444;">&#41;</span>;
    uvc = <span style="color: #39c; font-weight: bold;">new</span> UV<span style="color: #444;">&#40;</span>face.<span style="color: #444;">uv2</span>.<span style="color: #444;">u</span>, face.<span style="color: #444;">uv2</span>.<span style="color: #444;">v</span><span style="color: #444;">&#41;</span>;
&nbsp;
    <span style="color: #39c; font-weight: bold;">var</span> setMaterial:ITriangleMaterial;
    <span style="color: #069; font-weight: bold;">if</span> <span style="color: #444;">&#40;</span>obj.<span style="color: #444;">material</span><span style="color: #444;">&#41;</span> setMaterial = obj.<span style="color: #444;">material</span> as ITriangleMaterial;
    <span style="color: #069; font-weight: bold;">else</span> setMaterial = face.<span style="color: #444;">material</span> as ITriangleMaterial;
&nbsp;
    <span style="color: #39c; font-weight: bold;">var</span> fc:Face = <span style="color: #39c; font-weight: bold;">new</span> Face<span style="color: #444;">&#40;</span>va, vb, vc, setMaterial, uva, uvb, uvc<span style="color: #444;">&#41;</span>;
    mesh.<span style="color: #444;">addFace</span><span style="color: #444;">&#40;</span>fc<span style="color: #444;">&#41;</span>;
    _container.<span style="color: #444;">addChild</span><span style="color: #444;">&#40;</span>mesh<span style="color: #444;">&#41;</span>;
    mesh.<span style="color: #444;">bothsides</span> = obj.<span style="color: #444;">bothsides</span>;
    fc.<span style="color: #444;">back</span> = obj.<span style="color: #444;">back</span> as ITriangleMaterial;
<span style="color: #444;">&#125;</span></pre></td></tr></table></div>

<p>とする。</p>
<p>あとは、バラバラになった後のMeshが、もともとのFaceの法線方向をforwardベクトルにしてくれるといいのになぁと思ったけど面倒くさそうだったのでとりあえず保留。<br />
また、Explodeコンストラクタの第1引数をtrueにして、FaceごとのMeshを生成すると当然負荷が増大するので、パフォーマンス重視の場合はMeshを生成せずに、Faceレベルでコントロールする方法を確立しないとダメっぽい。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.r3c7.net/?feed=rss2&amp;p=420</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[PV3D2.1] Papervision3D 2.1 animation classes</title>
		<link>http://blog.r3c7.net/?p=390</link>
		<comments>http://blog.r3c7.net/?p=390#comments</comments>
		<pubDate>Thu, 11 Jun 2009 07:51:33 +0000</pubDate>
		<dc:creator>rect</dc:creator>
				<category><![CDATA[try]]></category>
		<category><![CDATA[papervision3d2.0]]></category>

		<guid isPermaLink="false">http://blog.r3c7.net/?p=390</guid>
		<description><![CDATA[
daeAnimation（要：FlashPlayer9）
[↑] … 前進（move forward）
[←] [→] … 方向変える（turn left/right）
Papervision2.1 Alpha 公開で [...]]]></description>
			<content:encoded><![CDATA[<p class="photo"><a href="/wp-content/uploads/parsers/daeAnimation/main.swf" target="_blank"><img src="/wp-content/uploads/e_deaanimation.jpg" border="0" /></a></p>
<p><a href="/wp-content/uploads/parsers/daeAnimation/main.swf" target="_blank" class="ext-link">daeAnimation</a>（要：FlashPlayer9）</p>
<p>[↑] … 前進（move forward）<br />
[←] [→] … 方向変える（turn left/right）</p>
<p>Papervision2.1 Alpha 公開で、鬼門だったDAE周りが改善されたということで使ってみた。<br />
<a href="http://techblog.floorplanner.com/2009/05/26/papervision3d-21-alpha/" target="_blank" class="ext-link">http://techblog.floorplanner.com/2009/05/26/papervision3d-21-alpha/</a></p>
<p>BlenderでArmature使ったスキンメッシュをColladaでエクスポートしたものがようやく動くようになった。3dsMAXとかMaya使わない限り不可能かと思ってたけど、どうにか使えそう。Away3Dでもなんとか動いてたけど、ボーンのモーションにtranslateが含まれてると破綻したりして不完全な感じだったのが、PV3D2.1のほうが格段にマトモだ。</p>
<p>上のデモは、<a href="http://www.kyucon.com/blog/archives/000440.html" target="_blank">KYUCON*BLOGさんで紹介されているAnimationClip3Dを使う方法</a>で静止状態と、歩行中のアニメーションを切り替えて再生してる。スタート・エンドポイントの指定がフレーム単位でもできればいいのになぁ…なんか歩行モーションのループ部分がぎこちない。Blender上だと綺麗につながるんだけどな。</p>
<p>Colladaの仕様的には、animationChannelを定義できるはずなので、Blenderでアニメーションセットを複数定義した上で正常に書き出しができればもっと楽ができそうな、ほのかで甘酸っぱい期待を持ったんだけど、Blenderで複数のアニメーションセットを定義する方法がわかんなくて一旦保留。</p>
<p>こうなってくると、アニメーション切り替え時にモーションブレンドしたい。それは自前で実装するしかねーだろうなー。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.r3c7.net/?feed=rss2&amp;p=390</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>o3d first impression</title>
		<link>http://blog.r3c7.net/?p=350</link>
		<comments>http://blog.r3c7.net/?p=350#comments</comments>
		<pubDate>Tue, 28 Apr 2009 08:03:21 +0000</pubDate>
		<dc:creator>rect</dc:creator>
				<category><![CDATA[try]]></category>
		<category><![CDATA[o3d]]></category>

		<guid isPermaLink="false">http://blog.r3c7.net/?p=350</guid>
		<description><![CDATA[o3dで遊んでみたメモ。
Developer&#8217;s Guideとサンプルを参考に、PV3D初挑戦の時と同じくCubeを回した。simple.jsっていうPV3DのBasicViewみたいなモジュール使うと楽がで [...]]]></description>
			<content:encoded><![CDATA[<p>o3dで遊んでみたメモ。<br />
<a href="http://code.google.com/intl/ja/apis/o3d/docs/devguideintro.html" target="_blank">Developer&#8217;s Guide</a>と<a href="http://code.google.com/intl/ja/apis/o3d/docs/samplesdirectory.html" target="_blank">サンプル</a>を参考に、PV3D初挑戦の時と同じくCubeを回した。simple.jsっていうPV3DのBasicViewみたいなモジュール使うと楽ができる。</p>
<p><a href="/wp-content/uploads/o3d/o3dTest.html" target="_blank" class="ext-link">Hello o3d</a>（要：o3dプラグイン）</p>
<blockquote><p>※デモを見るには、<a href="http://tools.google.com/dlpage/o3d/" target="_blank">o3dプラグイン</a>が、ブラウザにインストールされている必要があるのでそこんとこよろしくです。また、<a href="http://code.google.com/intl/ja/apis/o3d/docs/gettingstarted.html#graphicscards">動作ビデオカードに制限</a>があるので、動かない場合もあるです。</p></blockquote>
<p>オレの中で理解度のベンチマークになってしまいつつある、ネギ振りもやってみた。</p>
<p><a href="/wp-content/uploads/o3d/meshLoad.html" target="_blank" class="ext-link">ハイエンド ネギ振り</a>（要：o3dプラグイン）<br />
※クリックで振る</p>
<p>もともとPV3D用だったので、スペキュラとかディフューズの設定がデタラメな為、妙に光っております。o3dで外部シーンファイルを読み込んで使うには、専用のコンバータをかます必要がある。DAEファイルをコンバータにかけると、.tgzファイルが出来上がる。中身はテクスチャ用のビットマップデータとか頂点バッファ？とかのバイナリとか。元のColladaは、XMLから.jsonに変換された。.jsonのほうがパースが速いのかね？<br />
この辺の解説は、<a href="http://code.google.com/intl/ja/apis/o3d/docs/artdesignerguide.html">Developer&#8217;s GuideのImporting Scene Filesセクション</a>に書いてある。</p>
<p>つまずいたのはサーバーにアップロードした際、同一ドメイン内だとデータが読み込まれなかったこと。<a href="http://groups.google.com/group/o3d-discuss/browse_thread/thread/e0c45f5cbcca7e0a/973a41e3cba87143?lnk=gst&#038;q=.tgz#973a41e3cba87143" target="_blank">フォーラムに同じ問題に当たった人がいて</a>、この人は拡張子を「.tgz」から任意の適当な拡張子に変えることで解決できてたんだけど、オレの場合はだめだった。読み込み元となる.htmlとは別のサーバにアップロードした上で読み込んだら上手くいった。っていうかセキュリティ的に大問題だろこれ。</p>
<p><strong>追記：</strong><br />
MIMEタイプ設定の問題だった。.htaccessに以下を追加で解消。</p>
<pre class="code">AddType application/x-gzip .tgz</pre>
<p>まぁもう、まだまだドラフト版といった感じ。参照先を間違えたりするといきなりブラウザごと落ちたりとか普通だし。普及とかどうとか以前の問題ですな。</p>
<p>そういえば、o3dの登場でオレ的に注目度が上がったのが <a href="http://away3d.com/projects-using-away3d/jsaway" target="_blank">JSAway</a>。Away3DのJS版なんだけど、これのエンジン部分をo3dに丸投げするようになってくれたら超使い易い。一気にo3dがお手軽になるんだけどなー、やらないだろうな。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.r3c7.net/?feed=rss2&amp;p=350</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>O3D</title>
		<link>http://blog.r3c7.net/?p=336</link>
		<comments>http://blog.r3c7.net/?p=336#comments</comments>
		<pubDate>Wed, 22 Apr 2009 07:54:35 +0000</pubDate>
		<dc:creator>rect</dc:creator>
				<category><![CDATA[review]]></category>
		<category><![CDATA[o3d]]></category>

		<guid isPermaLink="false">http://blog.r3c7.net/?p=336</guid>
		<description><![CDATA[O3D API だって。Native Client派生かなぁ。
プラグインをインストールすると、HTML内に書いたJavaScriptで3Dコンテンツが動く。実行時にコンパイルしてるのか。シーンファイルとしてはColla [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/intl/ja/apis/o3d/" target="_blank">O3D API</a> だって。Native Client派生かなぁ。</p>
<p>プラグインをインストールすると、HTML内に書いたJavaScriptで3Dコンテンツが動く。実行時にコンパイルしてるのか。<del datetime="2009-04-27T10:40:59+00:00">シーンファイルとしてはColladaが読める。</del>[2009.04.27追記]ドキュメント斜め読みしてウソ書いてた。いまのところColladaファイルを専用のコンバータ使って、o3d用のファイルに変換したものしかシーンファイルには使えない模様。<br />
んで、<a href="http://code.google.com/intl/ja/apis/o3d/docs/gettingstarted.html" target="_blank">GPUサポート</a>してて、シェーダー（HLSLとCgで書けるようですな）も使える。素晴らしくイマドキですな。メタセコビューアとかは、こっちで作ればほぼ完全な状態で表示できそう。<br />
<a href="http://code.google.com/intl/ja/apis/o3d/docs/samplesdirectory.html" target="_blank">サンプルもいっぱいある</a>ので参考になる。</p>
<p>ハードウェア依存が高いのを承知で使えば、ハイエンド環境で勉強できていいと思う。ただ、コードが丸見えってのと、リソースの保護が難しそうなので、仕事となると話が変わってくるな。</p>
<p>とりあえず、これを見てヤケをおこしたAlternativaPlatformが、Alternativa3Dをオープン化してくれることに期待。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.r3c7.net/?feed=rss2&amp;p=336</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[PV3D2.0] virtualMouse axis on DAE</title>
		<link>http://blog.r3c7.net/?p=333</link>
		<comments>http://blog.r3c7.net/?p=333#comments</comments>
		<pubDate>Tue, 21 Apr 2009 06:42:13 +0000</pubDate>
		<dc:creator>rect</dc:creator>
				<category><![CDATA[try]]></category>
		<category><![CDATA[papervision3d2.0]]></category>

		<guid isPermaLink="false">http://blog.r3c7.net/?p=333</guid>
		<description><![CDATA[
Paint to DAE mash（要：FlashPlayer9）
WakaZさんのエントリー「PV3D &#124; DAEファイルの読込み」
DAEのオブジェクトにはVirtualMouseは効かないようで（あたりまえ）・・ [...]]]></description>
			<content:encoded><![CDATA[<p class="photo"><a href="/wp-content/uploads/parsers/daePaint/main.swf" target="_blank"><img src="/wp-content/uploads/e_daepaint.jpg" border="0" /></a></p>
<p><a href="/wp-content/uploads/parsers/daePaint/main.swf" target="_blank" class="ext-link">Paint to DAE mash</a>（要：FlashPlayer9）</p>
<p>WakaZさんのエントリー<a href="http://wakaz.info/2009/04/pv3d_dae.html" target="_blank">「PV3D | DAEファイルの読込み」</a></p>
<blockquote><p>DAEのオブジェクトにはVirtualMouseは効かないようで（あたりまえ）・・・。</p></blockquote>
<p>を読んで。</p>
<p>これは確かに解りにくいなー。<br />
例えば、</p>
<pre class="code">
var obj_dae:DAE = new DAE();
obj_dae.load("hoge.dae");
scene.addChild(obj_dae);
obj_dae.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, mouseClick);
</pre>
<p>だとイベントが取れない。なんでか？</p>
<p>PV3Dとかだと、3Dアプリケーションで作った形状データを取り込む目的でCollada形式を使ってるけど、本来、ColladaってシーングラフをまるごとXMLで記述しようっていうフォーマット（だと思う）なので、メッシュ以外にもカメラとかライトなど、3Dアプリ上で定義した全要素を定義できる。いってみれば、</p>
<pre class="code">
var daeObj:DAE = new DAE();
daeObj.load("hoge.dae");
</pre>
<p>で生成されたdaeObjってPV3Dのシーンみたいなもんで、ツリー構造なDisplayObject3Dの塊。なので、daeObj内にある目的のメッシュを明示的に参照しないとダメなのですな。あと、InteractiveScene3DEventを有効にする場合のお約束、マテリアルのinteractiveプロパティをtrueにするのを忘れずに。</p>
<p>具体的には、</p>
<pre class="code">
vMouse = viewport.interactiveSceneManager.virtualMouse;
Mouse3D.enabled = true;

-- 中略 --

obj_dae = new DAE();
obj_dae.load( "hoge.dae" );
obj_dae.addEventListener( FileLoadEvent.LOAD_COMPLETE, compCollada );
scene.addChild(obj_dae);

function compCollada(event:Event):void
{
    //対象となるマテリアルのinteractiveプロパティをtrueに
    obj_dae.materials.getMaterialByName("ターゲットのマテリアル").interactive = true;

    //対象メッシュの参照
    var dae_rootNode:DisplayObject3D = obj_dae.getChildByName("COLLADA_Scene");
    var targetMesh:DisplayObject3D = dae_rootNode.getChildByName("ターゲットの名前");

    //対象メッシュにリスナ設定
    targetMesh.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, mouseClick);
}

private function mouseClick(e:InteractiveScene3DEvent):void
{
    var axis:Point = new Point(vMouse.x, vMouse.y);
    trace(axis.x + " / " + axis.y);
}
</pre>
<p>って感じで。</p>
<p>上記で言うところの obj_dae内部では「COLLADA_Scene」って名前のDisplayObject3Dをルートとした階層構造（シーングラフ）ができあがってるってのを意識することが重要と。</p>
<p>getChildByNameで指定する名前は、ルートである「COLLADA_Scene」は固定、COLLADA_Scene以下の各メッシュは3Dアプリで付けた名前がエクスポートされてるはず。自分で作ったdaeファイルじゃない場合は、</p>
<pre class="code">
var dae_rootNode:DisplayObject3D = obj_dae.getChildByName("COLLADA_Scene");
dae_rootNode.childrenList();
</pre>
<p>で一覧が取れる。</p>
<p>ということで出来上がったのが上記のデモ。<br />
DAEでもプリミティブと同じようにペイントできるよ。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.r3c7.net/?feed=rss2&amp;p=333</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JigLibFlash Update</title>
		<link>http://blog.r3c7.net/?p=323</link>
		<comments>http://blog.r3c7.net/?p=323#comments</comments>
		<pubDate>Tue, 07 Apr 2009 16:37:58 +0000</pubDate>
		<dc:creator>rect</dc:creator>
				<category><![CDATA[try]]></category>
		<category><![CDATA[away3d]]></category>
		<category><![CDATA[jiglibflash]]></category>

		<guid isPermaLink="false">http://blog.r3c7.net/?p=323</guid>
		<description><![CDATA[PV3D専用だと思ってあんまりチェックしてなかったJigLibFlashが、PV3D以外のエンジンにも対応（現在、PV3D、Away3D、Sandyに対応）してくれたので、Away3Dでもそのまま使えるようになった。Ji [...]]]></description>
			<content:encoded><![CDATA[<p>PV3D専用だと思ってあんまりチェックしてなかった<a href="http://www.jiglibflash.com/blog/" target="_blank">JigLibFlash</a>が、PV3D以外のエンジンにも対応（現在、PV3D、Away3D、Sandyに対応）してくれたので、Away3Dでもそのまま使えるようになった。JigLib Flash for Away3D おつかれさま。</p>
<p>これまでのバージョンだと、表示用のメッシュにDisplayObject3Dをダイレクトに指定する形になっていたのが、ISkin3D っていうインターフェースをカマせることで、組み合わせたいエンジンのメッシュを指定できるようになった。<br />
Away3Dを使うなら、</p>
<pre class="code">
var box:JBox = new JBox(new Away3dMesh(daeobj),100,200,50);
※daeobjは、外部から読み込んだColladaモデルと仮定
</pre>
<p>って感じ。ちなみに、Away3dMeshクラスの実装は、Mesh オブジェクトを指定するようになってたけど、オレ的に不便なので、Object3D を指定するようにして使ってる。</p>
<p>あと、</p>
<pre class="code">
var physics:Away3DPhysics = new Away3DPhysics(viewport, 1);
var sphere:RigidBody = physics.createSphere({radius:30, segmentsW:6, segmentsH:6});
</pre>
<p>なんて感じで、プリミティブ形状については表示用メッシュと物理演算用メッシュを一度に定義できるメソッドが用意された。引数の与え方がPV3DとAway3Dで異なる部分は吸収してくれないので、それぞれのエンジンのルールに従うと。</p>
<p>このあたり、ある程度の説明が google code のプロジェクトページ内Wikiに記載されているので参考になる。<br />
<a href="http://code.google.com/p/jiglibflash/wiki/New_API_Very_Short_Tutorial" target="_blank" class="ext-link">New_API_Very_Short_Tutorial</a></p>
<p>また、<a href="http://jiglibflash.googlecode.com/svn/trunk/fp9/" target="_blank">svnリポジトリ</a>にもPV3D、Away3Dそれぞれのサンプルがある。これまでとシンタックスが大分異なる（physics.Integrate(0.1); → physics.step(); とか）ので、早めに乗り換えるが吉かと。<br />
コリジョン用の形状にカプセル型が追加されたのがウレシげだなぁ。元祖C++用のJigLibには、trianglemesh や heightmap なんてのもあるので、だんだん移植されるのかも。</p>
<p>早速インチキドライブシミュレータもどきに組み込んでみたんだけど、パラメータ共通なのに挙動が同じにならない。けど、なんか新しいほうがパラメータが正しく反映されてるような気がする。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.r3c7.net/?feed=rss2&amp;p=323</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>[Away3D] Away3D 2.3 Feature &#8211; NormalMapGenerator</title>
		<link>http://blog.r3c7.net/?p=276</link>
		<comments>http://blog.r3c7.net/?p=276#comments</comments>
		<pubDate>Thu, 26 Feb 2009 17:07:50 +0000</pubDate>
		<dc:creator>rect</dc:creator>
				<category><![CDATA[try]]></category>
		<category><![CDATA[away3d]]></category>

		<guid isPermaLink="false">http://blog.r3c7.net/?p=276</guid>
		<description><![CDATA[
normalMap Test（要：FlashPlayer9）
Away3D 2.1で、すでにサポート済みの normalMap（放線マップ）と関連して、今回新たに実装されたのが「NormalMapGenerator」。 [...]]]></description>
			<content:encoded><![CDATA[<p class="photo"><a href="/wp-content/uploads/away3d/normalMap/main.swf" target="_blank"><img src="/wp-content/uploads/e_normalMap.jpg" border="0" /></a></p>
<p><a href="/wp-content/uploads/away3d/normalMap/main.swf" target="_blank" class="ext-link">normalMap Test</a>（要：FlashPlayer9）</p>
<p>Away3D 2.1で、すでにサポート済みの normalMap（放線マップ）と関連して、今回新たに実装されたのが「NormalMapGenerator」。3Dアプリなどであらかじめ作成しておいたnormalMapを適用するのが通常なところを、Away3DでnormalMap自体を作ってしまおうというもの。</p>
<p>とにかくやってみたのが、上のデモ。中学校の技術の授業で作った「ミートハンマー」（笑）<br />
ハンマーの細かいデコボコがnormalMapによるもので、実際のメッシュは真っ平ら。ほんとはローポリとはいえ、ある程度のディテール持たせとくのがセオリーだと思うんで、このサンプルはかなりよろしくないですな；背景でビミョーなファインアート化してるのが、Away3Dによって動的に生成されたnormalMap。</p>
<p>手順はだいたい下記のような感じ。</p>
<ul>
<li>normalMap生成用のハイポリモデルと表示用のローポリモデルを作成（それぞれUV指定しておく）</li>
<li>ハイポリモデルをNormalMapGeneratorに渡してビットマップ生成（これがnormalMap）</li>
<li>作成されたnormalMapで、Dot3BitmapMaterial作成</li>
<li>ローポリモデルにDot3BitmapMaterialを適用</li>
</ul>
<p>ちょっとハマったのが、Object3DLoaderで読み込んだメッシュのマテリアルを書き換えるところ。Collada.loadで autoLoadTextures を無効化するのと、loader.handleから該当メッシュのみ取り出す必要があるってのがややこしかった。</p>
<pre class="code">
var loader:Object3DLoader = Collada.load('hoge.dae', {autoLoadTextures:false});

var mesh:Mesh = Mesh((loader.handle as ObjectContainer3D).getChildByName('fuga'));
mesh.material = dot3BitmapMaterial;
</pre>
<p>※Flash10 branchには、Dot3BitmapMaterialのPixelBender版がある。パフォーマンスにどの程度違いがあるか気になるところ。</p>
<p>なんつーか、単純にローポリモデルのディテール補完したいだけなら、あらかじめ作っておいたほうが楽だなぁ。どっちにしても一度ハイポリモデル作らなくちゃならないってのが、normalMapの難儀なとこ。せっかく動的生成できるなら、もっと変な使い方したい感じ…ちょっと思いつかないけど。<br />
個人的にはこういうハイエンドっぽい方向性より、シンプルなマテリアルのプリミティブで気持ちいい動きとか作るほうが好きだ。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.r3c7.net/?feed=rss2&amp;p=276</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Away3D] Away3D 2.2 リリース</title>
		<link>http://blog.r3c7.net/?p=230</link>
		<comments>http://blog.r3c7.net/?p=230#comments</comments>
		<pubDate>Mon, 29 Sep 2008 15:11:55 +0000</pubDate>
		<dc:creator>rect</dc:creator>
				<category><![CDATA[try]]></category>
		<category><![CDATA[away3d]]></category>

		<guid isPermaLink="false">http://blog.r3c7.net/?p=230</guid>
		<description><![CDATA[Away3D 2.2出てた。
メジャーバージョンアップ時の恒例行事になったデモは、相変わらず完成度高し。
主なバージョンアップ内容は以下。

Collada のボーンをサポート
Triangle キャッシュ機能追加（よく [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://away3d.com/away3d-22-railaway-express" target="_blank">Away3D 2.2出てた。</a><br />
メジャーバージョンアップ時の恒例行事になったデモは、相変わらず完成度高し。</p>
<p>主なバージョンアップ内容は以下。</p>
<ul>
<li><a href="http://blog.r3c7.net/?p=216">Collada のボーンをサポート</a>
<li>Triangle キャッシュ機能追加（よくわからんけど、△ポリの情報をキャッシュするんだろうか）
<li>バウンディングボックスとバウンディングスフィアの演算機能追加（これもよくわかんねーけど、コリジョン関係かも）
<li>PathExtrude, PathAnimator と PathDuplicatorの追加
<li><a href="http://blog.r3c7.net/?p=222">Simple shadowsの追加</a>
<li>Object based renderers追加（よくわからん）
<li>「.Obj」形式でのエクスポート
<li>ElevationModifierの追加
<li>Elevationで作成した形状を AS3 コードでのエクスポート
</ul>
<p>詳細は、フォーラムの Robによるアナウンス <a href="http://groups.google.com/group/away3d-dev/browse_thread/thread/ad5c8166a52ac3df" target="_blank">Away3d 2.2: the Motherlode</a> を参照。</p>
<p>一瞬だけsvnリポジトリに上がってた CellMaterial がいつの間にか消えとる。何か問題あったのかしら。</p>
<p><a href="http://away3d.com/downloads" target="_blank">オフィシャルサイトから.zipアーカイブがダウンロード</a>できる。また、同ページにて Flash IDE CS3/CS4向けのシンタックスハイライターが配布されとります。</p>
<p><strong>08/10/11追記：</strong><br />
2.2、かなりパフォーマンスが改善されてる模様。<br />
AS3Dmodのサンプルをビルドし直してみたところ、明らかに軽い。</p>
<p><a href="/wp-content/uploads/away3d/as3dmod/apendModifier_22.swf" target="_blank" class="ext-link">AS3Dmod 追加モディファイア Away3D2.2ビルド版</a>（要：FlashPlayer9）</p>
<p>比較用：<br />
<a href="/wp-content/uploads/away3d/as3dmod/apendModifier.swf" target="_blank" class="ext-link">AS3Dmod 追加モディファイア Away3D2.1ビルド版</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.r3c7.net/?feed=rss2&amp;p=230</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Away3D] Collada Animation</title>
		<link>http://blog.r3c7.net/?p=216</link>
		<comments>http://blog.r3c7.net/?p=216#comments</comments>
		<pubDate>Sat, 16 Aug 2008 04:41:52 +0000</pubDate>
		<dc:creator>rect</dc:creator>
				<category><![CDATA[try]]></category>
		<category><![CDATA[away3d]]></category>

		<guid isPermaLink="false">http://blog.r3c7.net/?p=216</guid>
		<description><![CDATA[Away3D2.1.5の新機能、Colladaのアニメーション・ボーン制御について整理。
いずれもBlender2.46にてColladaファイルを作成。
まずはアニメーションの制御。

walkMotion.swf（要 [...]]]></description>
			<content:encoded><![CDATA[<p>Away3D2.1.5の新機能、Colladaのアニメーション・ボーン制御について整理。<br />
いずれもBlender2.46にてColladaファイルを作成。</p>
<p>まずはアニメーションの制御。</p>
<p class="photo"><a href="/wp-content/uploads/away3d/collada_anim/walkMotion.swf" target="_blank"><img src="/wp-content/uploads/e_bonecontrol01.jpg" border="0" /></a></p>
<p><a href="/wp-content/uploads/away3d/collada_anim/walkMotion.swf" target="_blank" class="ext-link">walkMotion.swf</a>（要：FlashPlayer9）</p>
<pre class="code">
var loader:Object3DLoader;
loader = Collada.load('hoge.dae');
loader.addOnSuccess(loadComplete);
scene.addChild(loader);

- 中略 -

private function loadComplete(e:LoaderEvent):void
{
    model = (e.loader.handle as ObjectContainer3D);
    skinAnimation = (model.animationLibrary["default"] as AnimationData).animation as SkinAnimation;
}
</pre>
<p>モーション無しのColladaと同じ要領で読み込んだデータの animationLibrary プロパティから SkinAnimation オブジェクトを生成しておいてから、レンダーループ内とかで、</p>
<pre class="code">
skinAnimation.update(getTimer()/1500);
</pre>
<p>と、updateメソッドを呼んでやればとりあえず動く。<br />
引数は時間っぽい。SkinAnimationのloopプロパティがtrue（デフォルト値）なら、引数をひたすら増加させてやるだけで延々とアニメーションする。モーションを工夫して、いくつかの異なる動作を時間で区切れば多彩なアクションも可能かも。</p>
<p>これに関連した事柄で、ColladaにはAnimationChannelとかいう要素があって、複数のモーションデータを持たせることが仕様に含まれてるみたいなんだけど、その辺にも対応してるのかは不明。<br />
正しくデータが作られてればColladaのモーション再生自体はエラく簡単。</p>
<p>問題なのはやっぱりBlenderからのColladaエクスポート。<br />
今一つ確実に上手くいく方法が掴めないので、とッ散らかったメモを残しておく。</p>
<ul>
<li>Y軸が上方向となるようにモデリング〜ボーン設定を行う
<li>書き出されたColladaファイルの<up_axis>要素を「Y_UP」にする
<li>ルートボーンは1つにする
<li>メッシュとペアレントした後自動設定されるモディファイアのArmatureをRealizeする
<li>メッシュの各頂点が、必ずいずれかのVertexGroupに含まれるようにする
<li>ボーンの名称に「.（ピリオド）」が含まれないようにする
</ul>
<p>特に座標系の違いが要注意部分。ColladaエクスポーターとAway3DのCollada.asでこの部分の連携が上手くいってない気がする。<a href="http://blog.r3c7.net/?p=213">ガテン系ボーカロイドの腕が大変な動き</a>をしてたのは、Z軸を上にして作ってたからだった。</p>
<p>次に直接ボーンを制御する場合。</p>
<p class="photo"><a href="/wp-content/uploads/away3d/boneControl/main.swf" target="_blank"><img src="/wp-content/uploads/e_bonecontrol02.jpg" border="0" /></a></p>
<p><a href="/wp-content/uploads/away3d/boneControl/main.swf" target="_blank" class="ext-link">boneControl</a>（要：FlashPlayer9）<br />
※画面左のつまみ系UIで腕と足の各軸の回転角度をイジれる。超使いにくい（えー）</p>
<p>読み込んだColladaがボーンを含んでいる場合、</p>
<pre class="code">
var bone:Bone = model.getBoneByName("arm01_L");

//ボーンを各軸毎に回転
bone.jointRotationX(15);
bone.jointRotationY(5);
bone.jointRotationZ(10);

//ボーンを各軸毎に拡大縮小
bone.jointScaleX(0.5);
bone.jointScaleY(1.5);
bone.jointScaleZ(2);
</pre>
<p>って感じでアクセスできる。回転とスケールのみ制御可能。<br />
普通にObject3Dを回転させたりするのと同じ要領ですな。IKとか設定したらどうなるのかは未調査。今度調べてみよう。</p>
<p>全体的にPV3D + Blenderより全然まともに動く印象（最近のPV3Dがどうかはわかんないけど）Colladaのパースもやたら早いし。なかなかイイ感じなんじゃないでしょーか。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.r3c7.net/?feed=rss2&amp;p=216</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>
