📄 meshloader.h
字号:
//=============================================================================
// File: MeshLoader.h
// Desc: 处理从.obj文件加载网格及其材质和纹理的类
//==============================================================================
#ifndef _MESHLOADER_H_
#define _MESHLOADER_H_
#pragma once
//顶点结构
struct VERTEX
{
D3DXVECTOR3 position;
D3DXVECTOR3 normal;
D3DXVECTOR2 texcoord;
};
//
struct CacheEntry
{
UINT index;
CacheEntry* pNext;
};
//材质属性结构
struct Material
{
WCHAR strName[MAX_PATH];
D3DXVECTOR3 vAmbient;
D3DXVECTOR3 vDiffuse;
D3DXVECTOR3 vSpecular;
int nShininess;
float fAlpha;
bool bSpecular;
WCHAR strTexture[MAX_PATH];
IDirect3DTexture9* pTexture;
D3DXHANDLE hTechnique;
};
//类CMeshLoader的定义
class CMeshLoader
{
public:
CMeshLoader();
~CMeshLoader();
HRESULT Create( IDirect3DDevice9* pd3dDevice, const WCHAR* strFilename );
void Destroy();
UINT GetNumMaterials() const { return m_Materials.GetSize(); }
Material* GetMaterial( UINT iMaterial ) { return m_Materials.GetAt( iMaterial ); }
ID3DXMesh* GetMesh() { return m_pMesh; }
WCHAR* GetMediaDirectory() { return m_strMediaDir; }
private:
HRESULT LoadGeometryFromOBJ( const WCHAR* strFilename );
HRESULT LoadMaterialsFromMTL( const WCHAR* strFileName );
void InitMaterial( Material* pMaterial );
DWORD AddVertex( UINT hash, VERTEX* pVertex );
void DeleteCache();
IDirect3DDevice9* m_pd3dDevice; //和网格模型关联的设备
ID3DXMesh* m_pMesh; //网格模型接口
CGrowableArray< CacheEntry* > m_VertexCache;
CGrowableArray< VERTEX > m_Vertices;
CGrowableArray< DWORD > m_Indices;
CGrowableArray< DWORD > m_Attributes;
CGrowableArray< Material* > m_Materials;
WCHAR m_strMediaDir[ MAX_PATH ]; // .obj文件完整路径
};
#endif // _MESHLOADER_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -