📄 m2loader.h
字号:
//--------------------------------------------------
// Desc: M2 Loader
// Date: 2007.3.30 /update
// Author: Artsylee
//
// From: WOW Model Viewer
// I just coding in my own ways!
//
//--------------------------------------------------
#ifndef _M2LOADER_
#define _M2LOADER_
#include "M2Header.h"
#include "M2Animation.h"
class M2ParticleSystem;
class M2AniController;
class CM2Loader
{
public:
CM2Loader();
~CM2Loader();
bool Load(const char *pFileName, bool forceAnim = false);
void UpdatePaticle(void);
void UpdateAnimation(void);
void Render(void);
void RenderBound(void);
void RenderBone(void);
void RenderParticle(const D3DXMATRIX &matRotate);
void Destroy(void);
D3DXMATRIX GetAttachmentMatrix(int index);
void SetAnimationByID(int channel, int group, int id, int loop = 0);
void SetAnimationByIndex(int channel, int group, uint32 index, int loop = 0);
void SetNextAnimation(void);
void PlayAnimation(void);
bool IsPause(void);
void SetParticle(bool bValue) { m_bHasParticle = bValue; }
bool HasParticle(void) { return m_bHasParticle; }
void SetChar(bool bValue) { m_bChar = bValue; }
void SetRender(bool bValue) { m_bRender = bValue; }
private:
bool IsAnimation(void);
void InitCommon(void);
void InitAnimation(void);
void CalculateBone();
private:
bool m_bAnimGeometry; // 是否顶点动画
bool m_bAnimTextures; // 是否纹理动画
bool m_bAnimBones; // 是否有骨架
bool m_bAnimated; // 是否是动画
bool m_bBillBoard; // 是否布告牌
public:
M2AniController*m_pAniController;
uint32 m_CurAnimation;
uint32 m_AnimationTime;
M2Bone* m_pBone; // 骨骼数据
int m_SpecialTextureIndex[32]; // 换装部位
unsigned long m_ReplaceTexture[32]; // 换装句柄
private:
ModelAnimation* m_pAni;
int* m_pGlobalSequences; // 全局动画时间
uint8* m_pData;
ModelHeader m_Header;
M2Vertex* m_pVertex;
uint16* m_pVertexIndex;
M2BoundVertex* m_pBoundVertex;
uint16* m_pBoundIndex;
public:
M2Color* m_pColor;
M2Transparency* m_pTransparency;
private:
DWORD* m_pTexture;
public:
std::vector<ModelGeoset> m_SubMesh;
bool* m_bShowSubMesh;
std::vector<M2RenderPass> m_RenderPass;
private:
M2Camera m_Camera; // 只使用第一个镜头
bool m_bHasCamera;
float m_Radius; // 顶点离重心的最大距离
M2ParticleSystem* m_pParticle; //粒子系统
bool m_bHasParticle;
DWORD m_LastTime;
unsigned long m_LastUpdate;
std::vector<M2Attachment> m_Attachment;
int m_AttachLookup[40];
int m_BoneLookup[27];
// 测试用
char m_szModelName[256];
bool m_bChar; // 是否是角色
bool m_bRender;
};
#endif // _M2LOADER_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -