シーングラフファイルの書き方?

Xファイル

Xファイルとは

「Xファイル」とは,ファイル名に .x 拡張子が付いたファイルを指し, Direct3Dにおけるモデルデータの標準フォーマットです. 3Dの形状データ,マテリアル,テクスチャなどがテンプレートとして定義され, さらにユーザによって自由にテンプレートの定義の拡張を行うことができます.

編集方法

3Dの形状データ,マテリアルなど
3ds max や Metasequoia などのXファイルを出力できる市販のソフトを使って編集します.
物理,力覚
Xファイルをメモ帳などのテキストエディタで開いて, データを直接入力して編集します.

各データ型の記述テンプレート

  • Xファイル標準のテンプレートについてはMicrosoft DirectX 8.0 Xファイル テンプレートに書いてあります.
  • Springheadで拡張定義したテンプレートについては, SGD3D.cppの中のD3FileDoc::RegisterTemplates()に,
    "template 型名 {\n"
    "キー\n"
    "型 データの名前;\n"
    "      :           " 
    "      :           " 
    "[参照]\n"
    "}\n"
    のような形で定義されているか,
    ファイルローダの定義のところで,
    typedef float FLOAT;
    DEF_RECORD(XSphere, {
    	///	この型のGUID.TypeDescがGUIDを持つようになる.
    	GUID Guid(){ return WBGuid("4B4F22CC-9DD9-4f04-9373-9E0A03E36C35"); }
    	FLOAT Radius;
    	DWORD Slices;
    	DWORD Stacks;
    });
    のように構造体の定義と同時に定義されている
    例として,剛体オブジェクトのデータを持つテンプレート Solid では, 以下のような定義に対し,
    //剛体データの定義部分
    "template Solid {\n"
    " <A9C20358-EDEB-4c0b-97AB-37D330B6BFA4>\n"
    " FLOAT mass;\n"
    " Matrix3x3 inertia;\n"
    " Vector velocity;\n"
    " Vector angularVelocity;\n"
    " Vector center;\n"
    " [Frame]\n"
    "}\n"
    Xファイルでは,
    //ファイルでの剛体データの記述
    Solid soSpinTop{
      2.5;                    # 質量
      3.0, 0.0, 0.0,              
      0.0, 1.0, 0.0,          # 慣性テンソル
      0.0, 0.0, 3.0;;
      0.0; 0.0; 0.0;;         # 初期速度
      0.01; 16.0; 0.0;;       # 初期角速度
      0.0; 0.1; 0.0;;         # 重心(メッシュの原点からの相対位置)
      {frSpinTop}             # フレームへの参照
                              # (複数のフレームをツリーとして持つ場合は
                              # トップフレームを指す)
    }
    のように記述されます.
    サンプルファイルとしてコマ(TopRotYwithComment.x)にコメントを付けましたのでご参照ください.

ノードの説明

Springheadで拡張したノード(の一部)について説明します.

MeshForVisual

フォーマットはMeshと同じ.グラフィックスで表示されるが,衝突判定の対象にならないMesh.ポリゴン数が多くても,物理シミュレータは重くならない.

MeshForShape

フォーマットはMeshと同じだが,MeshNormalsやMaterialListなどの子ノードは持てない.衝突判定の対象になるがグラフィックスでは表示されないMesh.