zfxSkinMesh.h
资源名称:Direct3D.rar [点击查看]
上传用户:junlon
上传日期:2022-01-05
资源大小:39075k
文件大小:3k
源码类别:
DirextX编程
开发平台:
Visual C++
- //--------------------------------------------------------------------------------------
- // 头文件: zfxSkinMesh.h , 作者:曾凡喜
- //
- // 骨骼动画类,支持蒙皮骨骼动画
- //
- // 版权归作者所有,未经允许不得利用源代码进行任何商业活动
- //
- // 完成时间:2008-05-03
- //--------------------------------------------------------------------------------------
- #ifndef __zfxSkinMesh_H__
- #define __zfxSkinMesh_H__
- #include "zfxd3dUtility.h"
- #include "AllocateHierarchy.h"
- //-----------------------------------------------------------------------------
- // 骨骼动画类,注意播放骨骼动画时,帧刷新率不能过高,否则会出现闪烁现象
- // 控制最高帧刷新率的方法:将 d3dpp.PresentationInterval 设置为 D3DPRESENT_INTERVAL_DEFAULT
- //-----------------------------------------------------------------------------
- class CZFXSkinMesh
- {
- //-------------------------私有变量------------------------//
- private:
- CAllocateHierarchy* m_pAlloc; // CAllocateHierarchy类
- LPDIRECT3DDEVICE9 m_pd3dDevice;// 设备接口
- LPD3DXFRAME m_pFrameRoot;// 根框架
- //-------------------------私有函数------------------------//
- private:
- // 以递归的方式建立各级组合变换矩阵
- HRESULT SetupBoneMatrixPointers( LPD3DXFRAME pFrame );
- // 被SetupBoneMatrixPointers()调用
- HRESULT SetupBoneMatrixPointersOnMesh( LPD3DXMESHCONTAINER pMeshContainerBase );
- // 私有函数,被OnCreate(....)调用,先加载动画数据和层次框架(D3DXLoadMeshHierarchyFromX),
- // 然后建立各级组合变换矩阵(SetupBoneMatrixPointers),然后计算包围球(D3DXFrameCalculateBoundingSphere)
- HRESULT LoadFromXFile(WCHAR* strFileName);
- // 内部递归调用,更新各级框架的世界矩阵
- void UpdateFrameMatrices( LPD3DXFRAME pFrameBase, LPD3DXMATRIX pParentMatrix );
- // 内部递归调用,渲染框架
- void DrawFrame(LPD3DXFRAME pFrame);
- // 渲染属于框架pFrameBase的模型容器
- void DrawMeshContainer(LPD3DXMESHCONTAINER pMeshContainerBase, LPD3DXFRAME pFrameBase);
- public:
- // 以下两个变量用于计算包围球
- D3DXVECTOR3 m_vObjectCenter;//包围球中心点
- float m_fObjectRadius;//包围球半径
- // 将下述变量设置为FALSE,以禁止动画播放,默认为TRUE,即开启动画播放
- BOOL m_bPlayAnim;
- // 动画控制器,通过它可以控制动画播放的进度
- LPD3DXANIMATIONCONTROLLER m_pAnimController;
- public:
- // 从动画文件(文件名为strFileName)中加载动画数据和层次框架,
- // 在该函数中将调用私有函数LoadFromXFile(strFileName)。
- HRESULT OnCreate(LPDIRECT3DDEVICE9 pD3DDevice, WCHAR* strFileName);
- // 渲染骨骼模型,模型的世界矩阵由matWorld指定,fElapsedAppTime指定消逝的时间,
- // fElapsedAppTime的值不能太小,即帧刷新率不能太高,可以通过限制最高刷新率来达到这个目的,
- // 方法:将 d3dpp.PresentationInterval 设置为 D3DPRESENT_INTERVAL_DEFAULT。
- HRESULT Render(D3DXMATRIX* matWorld, float fElapsedAppTime);
- // 销毁骨骼动画数据
- HRESULT OnDestory();
- public:
- CZFXSkinMesh();
- virtual ~CZFXSkinMesh();
- };
- #endif //__zfxSkinMesh_H__