「 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) を参照下さい.