⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m2loader.h

📁 3D游戏展示程序
💻 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 + -