8 月 23 2008

PV3Dでレースゲーム制作 12 - 3Dモデル読み込み編

Posted by tanjo at 8:41 PM

以前、SWFに埋め込んだ3DモデルをPapervision3Dで使用する方法を紹介しましたが、実は、ローダで読み込んでから描画するのも同じようなやり方でできます。
ゲーム的にも外部からロードした方が勝手が良さそうだし、今後はこっちを採用する方向でいきます。

*PV3DでCOLLADAを表示できた状態を基準に書いてます。COLLADAを表示方法はこちら
*以下、共通部分は以前の記事のコピペです。

それでは、手順を追っていきましょう。(ところどころ用語が間違ってたらすいません…。)
Papervision3D のマテリアルリストを使うので、まずはクラスをインポート。

import org.papervision3d.materials.utils.MaterialsList;

3DモデルのDAEファイルとテクスチャ画像を読み込み、それぞれ XML と Bitmap にインスタンス化しておきます。
参照:PV3Dでレースゲーム制作 11 - AS3で複数のファイルをロードする
↓↓インスタンス作成部分の抜粋。(宣言は割愛してます。)

courseXML = XML(loaderArray[0].data);
txMainBitmap = Bitmap(loaderArray[1].content);
txTreeBitmap = Bitmap(loaderArray[2].content);
txItemBitmap = Bitmap(loaderArray[3].content);

次にマテリアルの作成。

var mdCourse01Materials:Object = new Object();
mdCourse01Materials = {
	t_all_jpg:new BitmapMaterial(txMainBitmap.bitmapData),
	t_all_jpg_2:new BitmapMaterial(txMainBitmap.bitmapData),
	t_tree_png:new BitmapMaterial(txTreeBitmap.bitmapData),
	t_item_jpg:new BitmapMaterial(txItemBitmap.bitmapData)
};

テクスチャの Bitmap を元に、マテリアル用の Object へ BitmapMaterial を登録していきます。
ここで注意点!Object のキーは、COLLADAのマテリアル名を使います。(赤文字部分。記述は順不同でOK。)
ですので、もしマテリアル名に妙な記号とか2バイト文字とかが入ってる場合は、あらかじめCOLLADAを修正しておかなければなりません。
マテリアル名は、Blender(COLLADAインポート)ではアニメーションビュー、球体アイコンで確認できます。

COLLADAのXML内では material タグに定義されています。

<library_materials>
	<material id="t_all_jpg" name="t_all_jpg">
...

ただしここ以外の場所からもid名を参照していたりするので、手作業で名前を変更するときは、検索してそれらを一括で変えてあげないとダメかもしれません。

さてASに戻り、最後に3Dオブジェクト作成。

courseObjects = new Collada( courseXML, new MaterialsList(mdCourse01Materials) );

Collada() メソッドの第1引数に読み込んだ XML インスタンス、第2引数に先ほどの Object から作った MaterialsList を指定すればOK。

あとはいつもどおり、Collada を Scene3D に addChild して、renderScene で描画するだけ。(→参照
今回もゲーム的には進展なしなので、デモとかはありません…!

Leave a Reply