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

📄 mlskinnedmesh.h

📁 这是一个混合动画的实例代码
💻 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 + -