今回はCollada形式(DAE)のファイルをPv3Dで読み込んでみました。
完成品とソースコード
まずGoogleの3Dギャラリーから適当なファイルをダウンロード。
利用規約は読んだけど多分問題はないはず。
拡張子daeのファイルがあるので、それをソースフォルダに持っていき、あとは、
var dae:DAE = new DAE(); dae.load("model.dae"); scene.addChild(dae);
と書けば表示されます。
だたし、こちらで解説されているように"org/papervision3d/core/proto/MaterialObject3D.as"の"tiled"の値を"true"にしないと正しく表示されません。
これだけだったらあまり苦労はしません。
Flex Builder上で実行するのにはエラーはでません。しかし、生成したswfファイルを実行すると、「ローカルファイルシステムの SWF および信頼されているローカル SWF ファイルのみがローカルリソースにアクセスできます。」といったエラーが発生します。
これを解決するには、モデルとテクスチャのファイルの埋め込みが必要になります。
今回一番苦労したのがこれです。
テクスチャファイルの埋め込みと、そのマテリアルリストの作成はこんな感じです。
[Embed(source='model/images/texture0.jpg')] private var texture0:Class; // 画像埋め込み var material0:Bitmap = new texture0() as Bitmap; var myMaterials:Object = { material_2_1_8_image: new BitmapMaterial(material0.bitmapData) }
上の「material_2_1_8_image」の部分は、daeファイルをテキストエディタで開き、画像ファイル名を検索すると、このようになっています。
<image id="material_0_23_8_image" name="material_0_23_8_image"> <init_from>../images/texture0.png</init_from> </image>
この"id"と"name"の値です。
自分が使用したdaeファイルは、この値が「material_0_23_8-image」というようになっていましたが、"-"を含むとASでエラーになるので、"_"に置換しています。
モデルデータの埋め込みとロードはこんな感じです。
[Embed(source="model/model.dae", mimeType="application/octet-stream")] var daeFile:Class; var daeObject:DAE = new DAE(); daeObject.load(XML(new daeFile()), new MaterialsList(myMaterials));
テクスチャの画像が多いと埋め込みが非常に面倒です。
鮭さんのほうで紹介されていたこちらを使わせてもらいました。便利便利。
今回の完成品ですが、一部のテクスチャの表示がうまくいってません。見逃してください。
今回の参考サイトはこちらです。
http://sakeprog.cocolog-nifty.com/sake/2008/08/papervision3d38_7285.html
http://blog.r3c7.net/?p=113
http://d.hatena.ne.jp/sakusan_net/20080702/1215003280
----------------------------------------
2009/10/18 追記
一部訂正しました。→こちら
0 件のコメント:
コメントを投稿