次の方法で共有


D3DXLoadMeshHierarchyFromX 関数

D3DXLoadMeshHierarchyFromX 関数

最初のフレーム階層を .x ファイルからロードする。

構文

HRESULT D3DXLoadMeshHierarchyFromX(      
    LPCTSTR Filename,
    DWORD MeshOptions,
    LPDIRECT3DDEVICE9 pDevice,
    LPD3DXALLOCATEHIERARCHY pAlloc,
    LPD3DXLOADUSERDATA pUserDataLoader,
    LPD3DXFRAME* ppFrameHeirarchy,
    LPD3DXANIMATIONCONTROLLER* ppAnimController
);

パラメータ

  • Filename
    [in] ファイル名を指定する文字列へのポインタ。コンパイラの設定が Unicode を要求している場合、データ タイプ LPCTSTR は LPCWSTR になる。それ以外の場合は、この文字列のデータ タイプは LPCSTR になる。「注意」を参照すること。
  • MeshOptions
    [in] D3DXMESH 列挙型からの 1 つまたは複数のフラグの組み合わせ。メッシュの作成オプションを指定する。
  • pDevice
    [in] IDirect3DDevice9 インターフェイスへのポインタ。メッシュに関連付けられているデバイス オブジェクトを表す。
  • pAlloc
    [in] ID3DXAllocateHierarchy インターフェイスへのポインタ。
  • pUserDataLoader
    [in] アプリケーションが提供する、ユーザー データのロードを許可するインターフェイス。「ID3DXLoadUserData」を参照すること。
  • ppFrameHeirarchy
    [out, retval] ロードされるフレーム階層へのポインタを返す。「D3DXFRAME」を参照すること。
  • ppAnimController
    [out, retval] .x ファイル内のアニメーションに対応するアニメーション コントローラへのポインタを返す。これは、デフォルトのトラックおよびイベントを使って作成される。「ID3DXAnimationController」を参照すること。

戻り値

成功した場合は、D3D_OK を返す。

失敗した場合は、次のいずれかの値を返す。

D3DERR_INVALIDCALL メソッドの呼び出しが無効である。たとえば、メソッドのパラメータに無効な値が設定されている場合などである。
E_OUTOFMEMORY Microsoft® Direct3D® が呼び出しを完了するための十分なメモリを割り当てることができなかった。

注意

コンパイラの設定によって関数のバージョンも決まる。Unicode が定義されている場合、この関数の呼び出しは D3DXLoadMeshHeirarchyFromXW になる。それ以外の場合は ANSI 文字列を使用するので、この関数の呼び出しは D3DXLoadMeshHeirarchyFromXA になる。

ファイル内のすべてのメッシュが 1 つの出力メッシュにまとめられる。ファイルにフレーム階層が格納されている場合、すべてのトランスフォームがメッシュに適用される。

D3DXLoadMeshHierarchyFromX は、.x ファイルからアニメーション データとフレーム階層をロードする。.x ファイルを調べ、pAlloc で渡された、ID3DXAllocateHierarchy の派生オブジェクトに基づいてフレーム階層とアニメーション コントローラを構築する。データのロードは、次の手順で行う。

  1. ID3DXAllocateHierarchy から派生させて、各メソッドを実装する。これによって、フレームおよびメッシュの割り当てと解放をどのように行うかを制御する。
  2. ID3DXLoadUserData から派生させて、各メソッドを実装する。.x ファイル内に埋め込みのユーザー定義データが存在しないか、これを必要としない場合は、この部分は省いてよい。
  3. ID3DXAllocateHierarchy クラスのオブジェクトを作成し、必要に応じて LoadUserData クラスのオブジェクトを作成する。これらのオブジェクトのメソッドを呼び出す必要はない。
  4. D3DXLoadMeshHierarchyFromX を呼び出して ID3DXAllocateHierarchy オブジェクトおよび ID3DXLoadUserData オブジェクト (または NULL) を渡し、フレーム階層とアニメーション コントローラを作成する。すべてのアニメーション セットとフレームが自動的にアニメーション コントローラに登録される。

ロード時には、フレームのロードと割り当てを制御するために、各フレームに対して ID3DXAllocateHierarchy::CreateFrameID3DXLoadUserData::LoadFrameChildData がコールバックされる。アプリケーションは、これらのメソッドを定義することによって、フレームの保管方法を制御する。メッシュ オブジェクトのロードと割り当てを制御するために、各メッシュ オブジェクトに対して ID3DXAllocateHierarchy::CreateMeshContainerID3DXLoadUserData::LoadMeshChildData がコールバックされる。他のメソッドでロードされない最上位の各オブジェクトに対して、ID3DXLoadUserData::LoadTopLevelData がコールバックされる。

このデータを解放するには、ID3DXAnimationController::Release を呼び出してアニメーション セットを解放し、D3DXFrameDestroy を呼び出してフレーム階層のルート ノードと ID3DXAllocateHierarchy の派生クラスのオブジェクトを渡す。フレーム階層内のすべてのフレームおよびメッシュ オブジェクトに対して、ID3DXAllocateHierarchy::DestroyFrameID3DXAllocateHierarchy::DestroyMeshContainer がそれぞれ呼び出される。ID3DXAllocateHierarchy::DestroyFrame の実装では、ID3DXAllocateHierarchy::CreateFrame によって割り当てられたものをすべて解放するようにしなければらない。メッシュ コンテナのメソッドについても同様である。

関数の情報

ヘッダー d3dx9anim.h
インポート ライブラリ d3dx9.lib
最低限のオペレーティング システム Windows 98