📄 mcmodel.h
字号:
// MCModel.h: interface for the CMCModel class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_MCMODEL_H__05936A31_84B8_4099_8567_0A7262EFAABD__INCLUDED_)
#define AFX_MCMODEL_H__05936A31_84B8_4099_8567_0A7262EFAABD__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//----------------------------------------------------------------------------------//
// D e f i n e
//----------------------------------------------------------------------------------//
#ifndef SAFE_DELETE
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
#endif
#ifndef SAFE_DELETE_ARRAY
#define SAFE_DELETE_ARRAY(p) { if(p) {delete [](p); (p)=NULL;} }
#endif
#ifndef SAFE_RELEASE
#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL;} }
#endif
#define MD3VERSION 15
#define MAX_MODEL 4 // 葛胆鸥涝狼 弥措摹甫 沥茄促~
#define D3DFVF_VERTEX (D3DFVF_XYZ | D3DFVF_NORMAL|D3DFVF_TEX1 )
enum MODEL_TYPE
{
MODEL_EQUIP = 0, //-> 葛电 厘厚幅俊 甸绢埃促.
MODEL_PLAYER,
MODEL_BULLET,
MODEL_OBJECT = 100,
MODEL_TERRAIN,
MODEL_NOTTING,
};
// Animation Enum
enum ANI_ACTION
{
/* !! 官诧 局聪 !! */
// Torso Ani
TORSO_STAND1 = 0,
TORSO_STAND2, TORSO_DEAD,
TORSO_WEAPON_DOWN, TORSO_WEAPON_UP,
TORSO_ATTACK, TORSO_SIGHT_ATTACK,
TORSO_SIGHT_UP, TORSO_SIGHT,
TORSO_SIGHT_DOWN, TORSO_RELOAD,
TORSO_STRUCK,
// Legs Ani
LEGS_STAND1 = 1000,
LEGS_STAND2,
LEGS_DEAD, LEGS_WALK,
LEGS_BAKWALK, LEGS_SIT_WALK,
LEGS_SIT_BAKWALK, LEGS_RUN,
LEGS_JUMP, LEGS_JUMPING,
LEGS_LAND, LEGS_LANDING,
LEGS_DUME, LEGS_SITDOWN,
LEGS_SIT, LEGS_SITUP,
LEGS_STRUCK, LEGS_BOOSTER_START,
LEGS_BOOSTER, LEGS_BOOSTER_END,
MAX_ANI,
STOP_ANI,
MAX_ANIMATION // MCModel.cpp 锭巩俊 混妨狄 绊模 第俊绰 昏力窍磊
};
typedef struct
{
ANI_ACTION Action;
ANI_ACTION *pCanList;
DWORD dwSize;
}ANI_LIST;
typedef struct
{
DWORD id;
int iVersion;
char cFileName[68];
int iBoneFrameNum;
int iTagNum;
int iMeshNum;
int iMaxTextureNum;
int iHeaderSize;
int iTagStart;
int iMeshStart;
int iFileSize;
}MD3HEADER;
//----------------------------------------------------------------------------------//
// 颇老俊辑 佬绢棵锭父 静绊 滚赴促~
typedef struct
{
char szTagName[64];
float Position[3]; // 怕弊狼 困摹牢啊
float fMatrix[3][3]; // 怕弊啊 啊府虐绰 规氢
}MD3TAG;
//-----------------------------------------------------------------------------------//
// MD3 MeshHeader
typedef struct
{
DWORD id;
char szName[68];
int iMeshFrameNum;
int iTextureNum;
int iVertexNum;
int iTriangleNum;
int iTriangleStart;
int iHeaderSize;
int iTecVecStart;
int iVertexStart;
int iMeshSize;
}MD3MESHHEADER;
//-----------------------------------------------------------------------------------//
// 胶农赋飘 包访 颇老阑 佬绰 备炼眉扼绰单...
// 2. 氓俊辑绰 咆胶贸匙烙捞扼绰单 ぱぱ;;; 构瘤
// 酒贰 2俺 备炼眉绰 (texname,triangle) 颇老阑 佬绢棵锭父 敬促.
typedef struct
{
char szString[68];
}MD3TEXNAME;
typedef struct
{
int Index[3];
}MD3TRIANGLE;
//-----------------------------------------------------------------------------------//
// 磺咆胶 汲疙~
// 阿阿阑 拘绵秦辑 历厘窍绰单, 关俊 阿 拘绵 规侥
//-----------------------------------------------------------------------------------//
// 磺咆胶 : 胶纳老傅蔼阑 啊瘤绊 拘绵茄促.
// float屈 谅钎 * 胶奶傅 = 弥辆蔼 | 叼内爹且锭绰 馆措肺 short屈 谅钎 / 胶奶傅 = 弥辆蔼
// 过急 : 盔贰扼搁 flaot x,y,z啊 鞘夸茄单 short屈栏肺 拘绵窃
// 构 困档客 版档啊 绢录绊 秦辑 x,y 滴俺肺 钎泅捞 啊瓷茄单 阿阿 蔼阑 0~255肺 力茄 矫虐搁
// 阿阿阑 8厚飘俊 淬阑荐 乐栏聪, 醚 16厚飘秦辑 short 茄俺俊 钎泅啊瓷窍促绊 窃 ぱぱ;
typedef struct
{
short Vertex[3];
short Normal;
}MD3VERTEX_FILE;
//------------------------------------------------------------------------------------//
// 酒贰 滴 备炼眉绰 角力肺 罚歹傅 窍芭唱 且锭 静绰 备炼眉
typedef struct
{
D3DXVECTOR3 vVector;
D3DXVECTOR3 vNoraml;
D3DXVECTOR2 Tex;
}D3DFVFVERTEX;
typedef struct
{
char szTagName[64];
D3DXMATRIXA16 matTag;
}D3DTAG;
// Animation
typedef struct
{
UINT nType;
UINT nFirstFrame, nNumFrames,nLoopingFrames, nFramesPerSecond;
}MD3ANI;
// 怕弊蔼俊 狼茄 函券 青纺
typedef struct
{
D3DXMATRIXA16 matInverse;
}TAGINVERSE;
// 怕弊蔼俊 狼茄 函券 谅钎
typedef struct
{
D3DXVECTOR3 vPos;
}TAGPOS;
class CMCModel
{
public:
CMCModel();
virtual ~CMCModel();
HRESULT CreateMD3Model(LPDIRECT3DDEVICE9 pD3dDevice, char *szMCFileName,char *szTexFileName,
char *szAniFileName, UINT nPartType, UINT nIDCode );
HRESULT CreateModelEx( char *szMCFileName, char *szTMFileName, char *szTexFileName,
char *szAniFileName, UINT nPartType );
HRESULT LoadFile( char * szFileName );
HRESULT LoadModel( char * szFileName );
HRESULT LoadTMFile( char * szFileName, BYTE nIndex);
HRESULT LoadTexture( char * szFileName );
HRESULT LoadAnimation( char * szFileName, BYTE nIndex );
BOOL Render(UINT nCurFrame,UINT nNextFrame,float finter, BYTE nIndex );
BOOL RenderEx( D3DXMATRIX matWorld, UINT nCurFrame,UINT nNextFrame,float finter, BYTE nIndex);
void BoundingBoxRender(DWORD dwCurFrame, D3DXMATRIX& matWorld, BYTE nIndex);
HRESULT CreateVertexIndexBuffer();
HRESULT CreateVertexIndexBufferEx(); // MC6 俊辑 静捞绰巴..
HRESULT CreateBoundBox( BYTE nIndex ); // MC6 俊辑 静捞绰巴..
HRESULT ReleaseVertexIndex();
MD3HEADER* GetMD3Header(BYTE nIndex) { return &m_MD3Header[nIndex]; }
MD3BOUNDBOX* GetBoundBox( DWORD dwCurFrame, BYTE nIndex ) { return &m_pBoundBox[nIndex][dwCurFrame]; }
D3DTAG* GetTag(BYTE nIndex) { return m_pTag[nIndex]; }
CMCMesh* GetMesh(char *pName, int *pCurCnt = NULL);
CMCMesh* GetMesh() { return m_pBoneMesh; } // 皋浆狼 矫累 林家甫 府畔
int GetMeshCnt() { return m_nMeshCount; } // 皋浆 俺荐 府畔
char * GetFilePath() { return m_szMCFileName; }
char * GetTexPath() { return m_szTexFileName; }
char * GetAniPath() { return m_szAniFileName; }
//int GetIDCode() { return m_nIDCode; }
int GetType() { return m_nPartType; }
public:
// Animation Info
vector<MD3ANI * > m_listAni[MAX_BONEANI];
private:
LPDIRECT3DDEVICE9 m_pd3dDevice;
int m_nIDCode; // 某腐磐 辆幅
int m_nPartType; // 何困(颇明) 辆幅
char * m_szMCFileName; // 颇老 版肺
char * m_szTexFileName;// 咆胶贸版肺
char * m_szAniFileName;// 局聪概捞记版肺
int m_nMeshCount;
CMCMesh * m_pBoneMesh;
CMCAni * m_pBoneAni[MAX_BONEANI];
D3DTAG * m_pTag[MAX_BONEANI];
MD3HEADER m_MD3Header[MAX_BONEANI];
MD3BOUNDBOX * m_pBoundBox[MAX_BONEANI];
char m_szName[68];
};
#endif // !defined(AFX_MCMODEL_H__05936A31_84B8_4099_8567_0A7262EFAABD__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -