「 X ファイル 」は、Direct3Dのファイルフォーマットで、拡張子は .x です。 モデリングソフトXSIで使われており、多くのモデリングツールで出力できます。 3Dの形状データ、マテリアル、テクスチャ、ボーンなどを含めることができます。 Springhead2では、標準的なXファイルのロードと、Springhead2独自のノードの ロードとセーブができます。ただし独自ノードを手書きする場合は Sprファイル の方が書きやすく便利ですのでそちらの使用をおすすめします。
Xファイルの例を示します。
xof 0302txt 0064 #最初の行はこれから始まる # ノードは, # 型名,ノード名 { フィールドの繰り返し 子ノード } # からなる. PHScene scene1{ 0.01;0;; #フィールド は 値; の繰り返し 1;0;-9.8;0;; #値は 数値,文字列またはフィールド PHSolid soFloor{ #子ノードは,ノードと同じ (省略) } } # コメントは #以外に // も使える
Springhead2 の通常のノードは,オブジェクトのディスクリプタ(節)に1対1で対応します. ロード時には,ディスクリプタに対応するオブジェクトが生成され,シーングラフに追加されます. セーブ時には,オブジェクトからディスクリプタを読み出し,ノードの形式でファイルに保存されます.
オブジェクトのディスクリプタには,必ず対応するノードがあります. 例えば,SprPHScene.h には,
struct PHSceneState{ double timeStep; ///< 積分ステップ unsigned count; ///< 積分した回数 }; struct PHSceneDesc:PHSceneState{ /// 接触・拘束解決エンジンの種類 enum ContactMode{ MODE_NONE, MODE_PENALTY, MODE_LCP}; Vec3f gravity; ///< 重力加速度ベクトル.デフォルト値は(0.0f, -9.8f,0.0f). };
のように,ステートとディスクリプタが宣言されています.この PHSceneDesc に対応する X ファイルのノードは,
PHScene scene1{ 0.01; #PHSceneState::timeStep 0;; #PHSceneState::count 最後の;はPHSceneState部の終わりを示す. 1; #PHSceneDesc::ContactMode 0;-9.8;0;;#PHSceneDesc::gravity 最後の;はPHSceneDesc部の終わりを示す. }
のようになります.クラスのメンバ変数がそのままフィールドになります. また,基本クラスは,先頭にフィールドが追加された形になります.
通常ノードの一覧は TBU: デスクリプタ一覧のページ を参照下さい.
Springhead2の独自ノードだけでなく、普通のXファイルのノードもロードできます。 Xファイルには、
Frame{ FrameTransfromMatrix{ 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1; } }
のようなフレームのノード型がありますが、 Sprinhead2 には対応するディスクリプタやオブジェクトがありません. そこで,これらは、GRFrameやPHFrameに 変換されてロードされます. TBW ノード一覧のページ(pageNodeDefList) を参照下さい.