Xファイルの読み込み
ゲームをつくろー!
からのコピペメモ
ここに載っているのはXファイルの階層構造やアニメーションコントローラ等を取得するための関数郡、構造郡です
- ID3DXAllocateHierarchy Alloc(this)
フレームやメッシュをひとまとめにするコンテナの生成・解放
- D3DXFRAME構造体
typedef struct _D3DXFRAME{ LPTSTR Name; // フレームの名前 D3DXMATRIX TransformationMatrix; // トランスフォーム行列 アニメーションで使うのはここかな? LPD3DXMESHCONTAINER pMeshContainer; // メッシュコンテナへのポインタ struct _D3DXFRAME *pFrameSibling; // 兄弟フレームへのポインタ struct _D3DXFRAME *pFrameFirstChild;// 子フレームへのポインタ }D3DXFRAME,*LPD3DXFRAME;
・・・ID3DXAllocateHierarchy>フレーム>メッシュコンテナ
ID3DXAllocateHierarchyインターフェイスは結局、このフレームのつながり、つまり階層を作成して管理してくれるマネージャのようなものだと想像します。
良く見れば、Allocate(メモリ確保)Hierarchy(階層)という名前が正にそれを示していますね。
- DXUtil_FindMediaFileCb( strMeshPath, sizeof(strMeshPath), m_strMeshFilename );
ファイル名からフルパスとそのファイルの存在の確認を行う関数。サンプル独自のもの
- D3DXLoadMeshHierarchyFromX(strMeshPath, D3DXMESH_MANAGED, m_pd3dDevice, &Alloc, NULL, &m_pFrameRoot, &m_pAnimController);
Xファイルからメッシュの階層を読み込む関数。 HRESULT D3DXLoadMeshHierarchyFromX( LPCTSTR Filename, // Xファイル DWORD MeshOptions, // メッシュ作成のオプション。通常はD3DXMESH_MANAGED。 LPDIRECT3DDEVICE9 pDevice, // D3D9デバイスへのポインタ LPD3DXALLOCATEHIERARCHY pAlloc, // ID3DXAllocateHierarchyインターフェイスへのポインタ LPD3DXLOADUSERDATA pUserDataLoader, // Xファイル内にユーザ定義部分があるとき、その情報をここに格納 LPD3DXFRAME* ppFrameHeirarchy, // D3DXFRAME構造体へのダブルポインタ。ルートフレームのポインタのポインタが返る LPD3DXANIMATIONCONTROLLER* ppAnimController // ID3DXAnimationControllerインターフェイスへのポインタ。 // Xファイルのアニメーションに対応するコントローラのアドレスが返る );
- SetupBoneMatrixPointers(m_pFrameRoot);
サンプル独自の関数
関数内部でルートフレームから子フレームを検索しながら、メッシュ情報を持つフレームを探し当て、
そこに格納されている「ボーン」の情報を格納しているようです。
- D3DXFrameCalculateBoundingSphere(m_pFrameRoot, &m_vObjectCenter, &m_fObjectRadius);
ルートフレームに含まれるメッシュ情報からオブジェクトの境界球の大きさを計算してくれるようです。
これは、メッシュごとではなくてルートフレームに所属するメッシュ全体での境界球です。衝突判定などで使いそうです。