【概要】
スキンメッシュ内の特定のフレームをフレーム名により探索し、常にその位置を保持する。
個別のボーンの位置や方向を取得したい時、このクラスを使用する。
ボーンの座標を基準に、エフェクトの生成や当たり判定に用いるといった使用方法が、通常予想される用途である。
フレームにはボーン等が格納されているが、モデラーで指定したボーン名がそのまま出力されているとは限らない為、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 | 指定名を持つフレームの姿勢・位置を示す行列を取得する。 |
※重要度の意味:
| 引数: | 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(); // グラフィックスの再読み込み
※ボーンの位置がボーンの根元なのか先端なのかは、データを出力した3Dソフトに依存します。//-------------------------------------------------------------------------------------- // 前提: 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));