📄 xskinloader.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 + -