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

📄 xskinloader.h

📁 3D游戏展示程序
💻 H
字号:
//--------------------------------------------------
//  Desc: X skin mesh loader
//  Date: 2007.3.19 /update
//  Author: artsylee
//
//  Copyright (C) 2007 artsylee
//
//--------------------------------------------------

#ifndef _XSKINLOADER_
#define _XSKINLOADER_

#include <d3d9.h>
#include <d3dx9.h>
#include "BaseLoader.h"

struct D3DXFRAME_DERIVED : public D3DXFRAME
{
	// absolute matrix
	D3DXMATRIXA16        CombinedTransformationMatrix;
};

struct D3DXMESHCONTAINER_DERIVED : public D3DXMESHCONTAINER
{
	 // array of textures, entries are NULL if no texture specified
	LPDIRECT3DTEXTURE9*  ppTextures;    

	// SkinMesh info             
	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
};

class CXSkinLoader;
class AllocateHierarchy : public ID3DXAllocateHierarchy
{
public:
	STDMETHOD(CreateFrame)(THIS_ LPCSTR Name, LPD3DXFRAME *ppNewFrame);
	STDMETHOD(CreateMeshContainer)(THIS_ LPCSTR Name, LPD3DXMESHDATA pMeshData, 
		LPD3DXMATERIAL pMaterials, LPD3DXEFFECTINSTANCE pEffectInstances, DWORD NumMaterials, 
		DWORD *pAdjacency, LPD3DXSKININFO pSkinInfo, 
		LPD3DXMESHCONTAINER *ppNewMeshContainer);
	STDMETHOD(DestroyFrame)(THIS_ LPD3DXFRAME pFrameToFree);
	STDMETHOD(DestroyMeshContainer)(THIS_ LPD3DXMESHCONTAINER pMeshContainerBase);

	AllocateHierarchy();
	~AllocateHierarchy();

	CXSkinLoader *m_pParent;
};

class CXSkinLoader : public CBaseLoader
{
public:
	CXSkinLoader();
	~CXSkinLoader();

	virtual bool Load(const char *pFileName);
	virtual void Render(void);
	virtual void Destroy(void);
	
	HRESULT CreateSkinMesh(D3DXMESHCONTAINER_DERIVED *pMeshContainer);
	ID3DXAnimationController* GetController(void)
	{
		return m_pAnimController;
	}
	LPD3DXFRAME GetRoot(void)	{ return m_pFrameRoot;	}
	void UpdateMatrices(LPD3DXMATRIX pParentMatrix);

private:
	void DrawFrame(LPD3DXFRAME pFrame);
	void DrawMeshContainer(LPD3DXMESHCONTAINER pMeshContainerBase, LPD3DXFRAME pFrameBase);
	void UpdateFrameMatrices(LPD3DXFRAME pFrameBase, LPD3DXMATRIX pParentMatrix);
	HRESULT SetupBoneMatrixPointers(LPD3DXFRAME pFrame);
	HRESULT SetupBoneMatrixPointersOnMesh(LPD3DXMESHCONTAINER pMeshContainerBase);

private:
	D3DXMATRIX*				m_pBoneMatrices;
	UINT                    m_NumBoneMatricesMax;
	LPD3DXFRAME             m_pFrameRoot;
	ID3DXAnimationController* m_pAnimController;
	AllocateHierarchy		m_Alloc;
};

#endif // _XSKINLOADER_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -