📄 mlskinnedmesh.h
字号:
///////////////////////////////////////////////////////////////////////////////
//
// File: mlSkinnedmesh.h
//
// Author: Frank Luna (C) All Rights Reserved
//
// System: Athlon 1800+ XP, 512 DDR, Radeon 9500 Pro, Windows XP, MSVC++ 7.0
//
// Desc: Represents a skinnedmesh.
//
// Assumptions.
// 1) We assume the input .X file contains exactly one mesh.
// 2) We assume the mesh contains one material, namely one texture map.
// 3) We hardcode the number of bone matrices to
//
///////////////////////////////////////////////////////////////////////////////
#ifndef __mlSkinnedMeshH__
#define __mlSkinnedMeshH__
#include "mlAllocMeshHierarchy.h"
#include "mlDirectXError.h"
#include <vector>
#include <string>
using namespace dx_err;
struct FrameEx : public D3DXFRAME
{
D3DXMATRIX combinedTransform;
};
class SkinnedMesh
{
public:
SkinnedMesh();
~SkinnedMesh();
void initDeviceObjects(IDirect3DDevice9* device,
cstring& inputFilename) throw(DirectXError);
void restoreDeviceObjects() throw(DirectXError);
void deleteDeviceObjects() throw(DirectXError);
void invalidateDeviceObjects() throw(DirectXError);
HRESULT confirmDevice(D3DCAPS9* pCaps);
void frameMove(float deltaTime, D3DXMATRIX& worldViewProj);
void render();
protected:
D3DXFRAME* findNodeWithMesh(D3DXFRAME* frame);
void buildSkinnedMesh(ID3DXMesh* mesh) throw(DirectXError);
void buildEffect() throw(DirectXError);
void buildMaterials(D3DXMESHCONTAINER* meshContainer)throw(DirectXError);
void buildCombinedTransforms();
void combineTransforms(FrameEx* frame, D3DXMATRIX& P);
// We do not implement the required functionality to do deep copies,
// so restrict copying.
SkinnedMesh(const SkinnedMesh& rhs);
SkinnedMesh& operator=(const SkinnedMesh& rhs);
protected:
IDirect3DDevice9* _device;
ID3DXMesh* _skinnedMesh;
IDirect3DTexture9* _tex;
ID3DXEffect* _effect;
D3DXFRAME* _root;
DWORD _maxVertInfluences;
DWORD _numBones;
ID3DXSkinInfo* _skinInfo;
ID3DXAnimationController* _animCtrl;
D3DXHANDLE _hTech;
D3DXHANDLE _hWorldViewProj;
D3DXHANDLE _hFinalTransforms;
D3DXHANDLE _hTex;
std::vector<D3DXMATRIX> _finalTransforms;
std::vector<D3DXMATRIX*> _combinedTransforms;
static const int MAX_NUM_BONES_SUPPORTED = 35;
};
#endif // __mlSkinnedMeshH__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -