dx中的蒙皮骨骼动画.doc

上传人:汽*** 文档编号:555842664 上传时间:2023-02-07 格式:DOC 页数:15 大小:107KB
返回 下载 相关 举报
dx中的蒙皮骨骼动画.doc_第1页
第1页 / 共15页
dx中的蒙皮骨骼动画.doc_第2页
第2页 / 共15页
dx中的蒙皮骨骼动画.doc_第3页
第3页 / 共15页
dx中的蒙皮骨骼动画.doc_第4页
第4页 / 共15页
dx中的蒙皮骨骼动画.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《dx中的蒙皮骨骼动画.doc》由会员分享,可在线阅读,更多相关《dx中的蒙皮骨骼动画.doc(15页珍藏版)》请在金锄头文库上搜索。

1、.当然能啦,你看看DXUT的源码,里边是不是有模型类?你声明两个模型,分别加载两个不久OK了?#pragma once#include AllocateHierarchy.hclass CSkinMeshprivate: CAllocateHierarchy* m_pAlloc; LPDIRECT3DDEVICE9 m_pd3dDevice; LPD3DXFRAME m_pFrameRoot; D3DXMATRIXA16* m_pBoneMatrices; UINT m_NumBoneMatricesMax;private: HRESULT SetupBoneMatrixPointers( L

2、PD3DXFRAME pFrame ); HRESULT SetupBoneMatrixPointersOnMesh( LPD3DXMESHCONTAINER pMeshContainerBase ); HRESULT LoadFromXFile(WCHAR* strFileName); VOID UpdateFrameMatrices( LPD3DXFRAME pFrameBase, LPD3DXMATRIX pParentMatrix ); VOID DrawFrame(LPD3DXFRAME pFrame); VOID DrawMeshContainer(LPD3DXMESHCONTAI

3、NER pMeshContainerBase, LPD3DXFRAME pFrameBase);public: D3DXVECTOR3 m_vObjectCenter; float m_fObjectRadius; BOOL m_bPlayAnim; LPD3DXANIMATIONCONTROLLER m_pAnimController;public: HRESULT OnCreate(LPDIRECT3DDEVICE9 pD3DDevice, WCHAR* strFileName); HRESULT Render(D3DXMATRIXA16* matWorld, float fElapsed

4、AppTime); HRESULT OnDestory();public: CSkinMesh(); virtual CSkinMesh();/=/ SkinMesh.cpp: 蒙皮网格模型类的实现/=#include dxstdafx.h#include SkinMesh.h/-/ Desc: 构造函数和析构函数 Construction/Destruction/-CSkinMesh:CSkinMesh() m_bPlayAnim = true; m_pd3dDevice = NULL; m_pAnimController = NULL; m_pFrameRoot = NULL; m_pBo

5、neMatrices = NULL; m_NumBoneMatricesMax = 0; m_pAlloc = new CAllocateHierarchy();/-/ Desc: 构造函数和析构函数 /-CSkinMesh:CSkinMesh() D3DXFrameDestroy(m_pFrameRoot, m_pAlloc); SAFE_RELEASE(m_pAnimController); delete m_pAlloc;/-/ Desc:创建并加载蒙皮网格模型/-HRESULT CSkinMesh:OnCreate(LPDIRECT3DDEVICE9 pD3DDevice, WCHAR

6、 *strFileName) HRESULT hr; m_pd3dDevice = pD3DDevice; hr = LoadFromXFile(strFileName); if(FAILED(hr) return hr; return S_OK;/-/ Desc: 从文件加载蒙皮网格模型/-HRESULT CSkinMesh:LoadFromXFile(WCHAR *strFileName) HRESULT hr; /根据文件名, 从指定的路经查找文件 WCHAR strPathMAX_PATH; DXUTFindDXSDKMediaFileCch( strPath, sizeof(strP

7、ath) / sizeof(WCHAR), strFileName ); /从.X文件加载层次框架和动画数据 V_RETURN(D3DXLoadMeshHierarchyFromX(strPath, D3DXMESH_MANAGED, m_pd3dDevice, m_pAlloc, NULL, &m_pFrameRoot, &m_pAnimController); /建立各级框架的组合变换矩阵 V_RETURN(SetupBoneMatrixPointers(m_pFrameRoot); /计算框架对象的边界球 hr = D3DXFrameCalculateBoundingSphere(m_p

8、FrameRoot, &m_vObjectCenter, &m_fObjectRadius); if (FAILED(hr) return hr; return S_OK;/-/ Desc: 仅在LoadFromXFile中调用。调用子函数SetupBoneMatrixPointersOnMesh()/ 安置好各级框架(实际上是各个骨骼)的组合变换矩阵。/ 注意: 在这里其实并没有计算出各个骨骼的组合变换矩阵,只是为每个矩阵开辟了相应/ 的存储空间,真正的计算是在函数CSkinMesh:UpdateFrameMatrices()中完成的。/-HRESULT CSkinMesh:SetupBon

9、eMatrixPointers(LPD3DXFRAME pFrame) HRESULT hr; if (pFrame-pMeshContainer != NULL) hr = SetupBoneMatrixPointersOnMesh(pFrame-pMeshContainer); /调用子函数 if (FAILED(hr) return hr; if (pFrame-pFrameSibling != NULL) hr = SetupBoneMatrixPointers(pFrame-pFrameSibling); /递归 if (FAILED(hr) return hr; if (pFram

10、e-pFrameFirstChild != NULL) hr = SetupBoneMatrixPointers(pFrame-pFrameFirstChild); /递归 if (FAILED(hr) return hr; return S_OK;/-/ Desc: 仅在SetupBoneMatrixPointers()中被调用,设置每个骨骼的组合变换矩阵/-HRESULT CSkinMesh:SetupBoneMatrixPointersOnMesh(LPD3DXMESHCONTAINER pMeshContainerBase) UINT iBone, cBones; / cBones表示骨骼数量,iBone表示循环变量 D3DXFRAME_DERIVED *pFrame; /先强制转为扩展型 D3DXMESHCONTAINER_DERIVED *pMeshContainer = (D3DXMESHCONTAINER_DERIVED*)pMeshContainerBase; / 只有蒙皮网格模型才有骨骼矩阵 if (pMeshContainer-pSkinInfo != NULL) /得到骨骼数量

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号