【概要】
CMesh の拡張クラス。アニメーション機能を追加。
| 重要度 | メソッド名 解説 | アクセス |
|---|---|---|
| ◎ | CSkinnedMesh(CD3DEnv *pEnv, TCHAR *fname) コンストラクタ | public |
| ◎ | ~CSkinnedMesh()
デストラクタ | public |
| ◎ | virtual void Render(LPDIRECT3DDEVICE9 lpd3ddev) モデルデータをグラフィックデバイスに対して描画する。 | public |
| △ | virtual void RenderWithoutMaterials(LPDIRECT3DDEVICE9 lpd3ddev,D3DMATERIAL9 *pMaterial) モデルデータをグラフィックデバイスに対して描画する。メッシュ内のマテリアルは無視する。 | public |
| ◎ | HRESULT FrameMove(D3DXMATRIX *pMatWorld, D3DXMATRIX *pMatView, FLOAT fElapsedTime) アニメーションのグローバルタイムをfElapsedTimeの分進める。 | public |
| ○ | HRESULT GetAnimationController(LPD3DXANIMATIONCONTROLLER *p) アニメーションコントローラを取得する。リファレンスカウントがインクリメントされる。 | public |
| ○ | HRESULT AdjustAnimation(D3DXMATRIX *pMatWorld, D3DXMATRIX *pMatView) アニメーションコントローラによりグローバルタイムを変更せず、アニメーションを適用する。 | public |
| ○ | HRESULT ResetAnimation(D3DXMATRIX *pMatWorld, D3DXMATRIX *pMatView) アニメーションのグローバルタイムをリセットする。 | public |
| ○ | void ResetAnimationMatrices() 全てのアニメーションを初期状態に戻す。 | public |
| ○ | void SetFog(FLOAT fStart, FLOAT fEnd) フォグを設定する。現状はリニアフォグのみのサポート。 | public |
| ○ | void AddAnimation(TCHAR *fname) アニメーションをファイルから追加読み込みする。 | public |
| ○ | void SetLightEnable(DWORD dwNum,BOOL bLight) ライトを有効または無効にする。 | public |
| ○ | void RenderBones(LPDIRECT3DDEVICE9 lpd3ddev) ボーンを直線で表現してレンダリングする。 | public |
※重要度の意味:
※:注意点1
CSkinnedMeshに対する以下のメソッドの呼び出しは成功しない。
GetFVF(), GetVertexBuffer(LPDIRECT3DVERTEXBUFFER9 *ppVB),
GetIndexBuffer(LPDIRECT3DINDEXBUFFER9 *ppIB), GetNumVertices(), GetNumFaces()
※:注意点2
メッシュの読み込みは、InitDeviceObjects の内部で行われている。
メッシュの再読み込みが行われる際には必ずこのメソッドが呼び出される為、
このメソッドをオーバライドする事で、メッシュを読み込んだ後の後処理を行う事ができる。
例:当たり判定に使用する為、D3DXFrameFind を用いて、メッシュ内のパーツを示すポインタをセットアップする・・・など。
※:注意点3
1頂点あたり影響可能なボーンの数は4までである。モデラーから出力する際、設定に注意が必要である。
※:注意点4
CSkinnedMeshに対する以下のメソッドの返す値は誤差が大きく不正確である。
GetRadius(), GetBoundingSphere(), GetBoundingBox()
必要であれば、各自正確なものを実装されたい。
| 引数: | pEnv:このメッシュオブジェクトが使用する描画環境へのポインタ。 |
| fName:ファイルネームを示す文字列へのポインタ(実行ファイルからの相対パス)。 |
| 引数: | lpd3ddev:描画に使用するDirect3D9 デバイス。 |
| pMaterials:描画に使用されるマテリアル。 |
| 引数: | pMatWorld:階層構造を成すメッシュの根となるモデルに対するワールド行列。 |
| pMatView:階層構造を成すメッシュの根となるモデルに対するビュー行列。 | |
| fElapsedTime:アニメーションを進める時間。 |
【使用例(サンプル を参照)】 LPD3DXANIMATIONCONTROLLER pAnim = NULL; if (SUCCEEDED(g_pMesh->GetAnimationController(&pAnim))){ LPD3DXANIMATIONSET pAnimSet = NULL; if (SUCCEEDED(pAnim->GetAnimationSet(0,&pAnimSet))){ period = (float)pAnimSet->GetPeriod(); g_fTime += timeElapsed * (1.0f/60.0f); if (g_fTime > period) g_fTime -= period; pAnim->SetTrackAnimationSet(0,pAnimSet); pAnim->SetTrackEnable(0,true); pAnim->SetTrackSpeed(0,1.0f); pAnim->SetTrackWeight(0,1.0f); pAnim->SetTrackAnimTime(0,g_fTime); g_pMesh->ResetAnimation(&matWorld,g_pD3DEnv->GetSystemView()); pAnimSet->Release(); } pAnim->Release(); // ※ }
| 引数: | pMatWorld:階層構造を成すメッシュの根となるモデルに対するワールド行列。 |
| pMatView:階層構造を成すメッシュの根となるモデルに対するビュー行列。 |
| 引数: | pMatWorld:階層構造を成すメッシュの根となるモデルに対するワールド行列。 |
| pMatView:階層構造を成すメッシュの根となるモデルに対するビュー行列。 |
| 引数: | fStart:フォグのかかり始めるZの値。 |
| fEnd:フォグがもっとも濃くなるZの値。 |
g_pMesh->SetFog(6.0f,10.0f); lpd3ddev->SetRenderState(D3DRS_FOGENABLE,TRUE); lpd3ddev->SetRenderState(D3DRS_FOGCOLOR,D3DCOLOR_XRGB(168,168,168)); g_pMesh->Render(lpd3ddev);
| 引数: | dwNum:不使用(0を指定すること)。 |
| bLight:TRUE であれば有効、FALSE であれば無効。 |
| 引数: | lpd3ddev:描画用のデバイス。 |