class CMeshFrameTracker

【概要】
 スキンメッシュ内の特定のフレームをフレーム名により探索し、常にその位置を保持する。
 個別のボーンの位置や方向を取得したい時、このクラスを使用する。

 ボーンの座標を基準に、エフェクトの生成や当たり判定に用いるといった使用方法が、通常予想される用途である。

 フレームにはボーン等が格納されているが、モデラーで指定したボーン名がそのまま出力されているとは限らない為、MeshViewer 等で確認する事が必要である。

重要度メソッド名アクセス解説
CMeshFrameTracker(CD3DEnv *pEnv, CHierarchicalMesh *pMesh, TCHAR *pStrName)publicコンストラクタ。
~CMeshFrameTracker()publicデストラクタ。
LPD3DXFRAME GetFrame()public指定名を持つフレームを取得する。
LPD3DXFRAME GetParentFrame()public指定名を持つフレームの親フレームを取得する。
HRESULT GetFrameMatrix(LPD3DXMATRIX pMat)public指定名を持つフレームの姿勢・位置を示す行列を取得する。
HRESULT GetParentFrameMatrix(LPD3DXMATRIX pMat)public指定名を持つフレームの姿勢・位置を示す行列を取得する。

※重要度の意味:

◎これを知らないとこのライブラリを使えないレベル。
○知っておいたほうが良いレベル。
△知らなくても支障は無いレベル。


CMeshFrameTracker(CD3DEnv *pEnv, CHierarchicalMesh *pMesh, TCHAR *pStrName)

引数:pEnv : 使用する描画環境。
pMesh : トラッキング対象のメッシュオブジェクト。
pStrName : トラッキング対象のフレーム名(通常ボーン名)。

本クラスのコンストラクタ。
このクラスは描画環境に登録され、グラフィックスの再読み込み時に、スキンメッシュ内の探索が 再度行われる為、再読み込みによりスキンメッシュのメモリ上の位置が変わったとしても、 問題無く特定フレームの追跡を行う事が可能である。実際の探索はコンストラクタ内では行われない為、 グラフィックスの再読み込みが必要である。

【使用例】

    g_pEnv = new CD3DEnv();
    g_pEnv->InitD3D(hWnd);    //  hWnd : アプリケーションのウィンドウハンドル
    CHierarchicalMesh *pMesh = new CHierarchicalMesh(g_pEnv, "Hito\\Hito.x");
    CMeshFrameTracker *pTracker = new CMeshFrameTracker(g_pEnv, pMesh, "LeftHand");

    g_pEnv->ReloadGraphics(); //  グラフィックスの再読み込み


~CMeshFrameTracker()

デストラクタ


LPD3DXFRAME GetFrame()

引数:なし
返値:トラッキング対象のフレーム

トラッキング対象のフレームを返す。見つからなかった場合もしくはまだ探索が行われていない場合は NULL を返す。


LPD3DXFRAME GetParentFrame()

引数:なし
返値:トラッキング対象の親フレーム

トラッキング対象の親フレームを返す。見つからなかった場合もしくはまだ探索が行われていない場合は NULL を返す。


HRESULT GetFrameMatrix(LPD3DXMATRIX pMat)

引数:pMat : 返す行列を格納する行列へのポインタ
返値:成功すると S_OK

トラッキング対象のフレームの位置・姿勢を表すポインタを返す。 見つからなかった場合もしくはまだ探索が行われていない場合は E_FAIL を返す。


HRESULT GetParentFrameMatrix(LPD3DXMATRIX pMat)

引数:pMat : 返す行列を格納する行列へのポインタ
返値:成功すると S_OK

トラッキング対象のフレームの親フレームの位置・姿勢を表すポインタを返す。 見つからなかった場合もしくはまだ探索が行われていない場合は E_FAIL を返す。

【使用例:指定されたボーンとその親ボーンの間に直線を描画する】

    //--------------------------------------------------------------------------------------
    //  前提:  pTracker :本クラスのインスタンス。特定のボーンを追跡しているものとする。
    //          g_pEnv   :有効な描画環境(CD3DEnv インスタンス)
    //--------------------------------------------------------------------------------------
    D3DXMATRIX	mat1, mat2;
    D3DXVECTOR3	vec[2];
    vec[0] = D3DXVECTOR3(0,0,0);
    vec[1] = D3DXVECTOR3(0,0,0);
    pTracker->GetFrameMatrix(&mat1);
    pTracker->GetParentFrameMatrix(&mat2);
    D3DXVec3TransformCoord(&vec[0],&vec[0],&mat1);
    D3DXVec3TransformCoord(&vec[1],&vec[1],&mat2);
    g_pEnv->RenderLine3D(vec,D3DCOLOR_XRGB(255,96,96));
※ボーンの位置がボーンの根元なのか先端なのかは、データを出力した3Dソフトに依存します。


D3DQuickLib のTOPページへ。