📄 skinmesh.h
字号:
//////////////////////////////////////////////////////////////////////
// SkinMesh.h: interface for the CSkinMesh class.
//
//////////////////////////////////////////////////////////////////////
#ifndef __SkinMesh_H__
#define __SkinMesh_H__
#if !defined(AFX_SKINMESH_H)
#define AFX_SKINMESH_H
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <tchar.h>
#include <d3dx9.h>
#include <d3dx9mesh.h>
#include "AllocateHierarchy.h"
// 释放资源的宏
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p); (p)=NULL; } }
#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
//-----------------------------------------------------------------------------
// Name: struct D3DXFRAME_EX
// Desc: 该结构体继承自D3DXFRAME,新加入一个框架的世界变换矩阵(框架的组合变换矩阵)
//-----------------------------------------------------------------------------
struct D3DXFRAME_EX: public D3DXFRAME
{
D3DXMATRIXA16 CombinedTransformationMatrix;
};
//-----------------------------------------------------------------------------
// Name: struct D3DXMESHCONTAINER_EX
// Desc: 网格容器结构,该结构体继承自D3DXMESHCONTAINER,加入一些特定应用的信息
//-----------------------------------------------------------------------------
struct D3DXMESHCONTAINER_EX: public D3DXMESHCONTAINER
{
LPDIRECT3DTEXTURE9* ppTextures; // 纹理数组指针,如果没有信息将指向NULL
// 蒙皮信息
LPD3DXMESH pOrigMesh; // 原始模型
LPD3DXATTRIBUTERANGE pAttributeTable; // 属性表指针
DWORD NumAttributeGroups; // 属性组的数量
DWORD NumInfl; //
LPD3DXBUFFER pBoneCombinationBuf; //
D3DXMATRIX** ppBoneMatrixPtrs; // 指向骨骼矩阵的二级指针
D3DXMATRIX* pBoneOffsetMatrices; // 骨骼偏移矩阵指针
DWORD NumPaletteEntries; //
bool UseSoftwareVP; // 是否使用软件顶点
DWORD iAttributeSW; // used to denote the split between SW and HW if necessary for non-indexed skinning
// 如果必要的话,通常在没有蒙皮索引的情况下,用来切换软件顶点与硬件顶点处理
};
// enum for various skinning modes possible
// 枚举出不同的蒙皮模型种类
enum METHOD
{
D3DNONINDEXED, // 无索引
D3DINDEXED, // 有索引
SOFTWARE, // 软件处理
NONE // 未知
};
class CSkinMesh;
//蒙皮动画
class CSkinMesh
{
public:
CSkinMesh( LPDIRECT3DDEVICE9 pD3DDevice ); // 构造函数1
// CSkinMesh(LPDIRECT3DDEVICE9 pD3DDevice,char* strFileName); // 构造函数2
virtual ~CSkinMesh(); // 析构函数
VOID SetAnim( BOOL bAnim ); // 设置动画
BOOL CSkinMesh::InterSect( D3DVECTOR *pRayOrig, D3DVECTOR *pRayDir, D3DVECTOR* pVRet ); // 判断射线是否与...相交
VOID UpdateFrameMatrices( LPD3DXFRAME pFrameBase, LPD3DXMATRIX pParentMatrix ); // 更新框架矩阵 @par1 框架指针,@par2父矩阵
LPD3DXANIMATIONCONTROLLER GetAnimController() { return m_pIAnimController; }; // 取得动画控制器
BOOL SetAnimationName( char *strAnimName ); // 设置动画名字
//void SetPosition( D3DXVECTOR3 &vPos ) { m_vPos = vPos; }; // 设置模型位置
VOID Render( float fTimeFromLastFrame, D3DXVECTOR3 vPos, float angle, float scale=1.0f ); // 渲染
HRESULT LoadFromXFile( char* strFileName ); // 加载X文件
HRESULT GenerateSkinnedMesh( D3DXMESHCONTAINER_EX *pMeshContainer ); // 生成蒙皮模型 @par1 网格容器
HRESULT CalculateBondingBox( LPD3DXFRAME pFrameParent, D3DXVECTOR3 *pVmin, D3DXVECTOR3 *pVmax );// 计算模型的包围盒,通过参数返回包围盒数据
// 以下为类数据成员
//LPDIRECT3DVERTEXSHADER9 m_pIndexedVertexShader[4]; // 没用到
D3DXMATRIXA16* m_pBoneMatrices;
UINT m_NumBoneMatricesMax;
METHOD m_SkinningMethod;
D3DCAPS9 m_d3dCaps;
D3DXVECTOR3 m_vObjectCenter; // Center of bounding sphere of object
FLOAT m_fObjectRadius; // Radius of bounding sphere of object
D3DXVECTOR3 m_vMin; // Center of bounding sphere of object
D3DXVECTOR3 m_vMax; // Center of bounding sphere of object
protected:
VOID DrawMeshContainer(LPD3DXMESHCONTAINER pMeshContainerBase, LPD3DXFRAME pFrameBase);
VOID DrawFrame(LPD3DXFRAME pFrame);
HRESULT SetupBoneMatrixPointersOnMesh( LPD3DXMESHCONTAINER pMeshContainerBase );
HRESULT SetupBoneMatrixPointers( LPD3DXFRAME pFrame );
// FLOAT m_fRotateAngle;
BOOL m_bMoving; // 是否正在移动
LPDIRECT3DDEVICE9 m_pID3dDevice; // 设备
LPD3DXFRAME m_pFrameRoot; // 根框架
LPD3DXANIMATIONCONTROLLER m_pIAnimController; // 动画控制器
FLOAT m_fElapsedTime; // 单帧时间
};
#endif // !defined(AFX_SKINMESH_H__AE3ADAAF_4BE2_4B23_9A1D_9379FA1BAFD9__INCLUDED_)
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -