Xファイル

「 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: デスクリプタ一覧のページ を参照下さい.

Xファイルのノード

Springhead2の独自ノードだけでなく、普通のXファイルのノードもロードできます。 Xファイルには、

Frame{
    FrameTransfromMatrix{ 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1; }
}

のようなフレームのノード型がありますが、 Sprinhead2 には対応するディスクリプタやオブジェクトがありません. そこで,これらは、GRFramePHFrameに 変換されてロードされます. TBW ノード一覧のページ(pageNodeDefList) を参照下さい.