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

📄 meshloader.h

📁 DX例子中等难度的。全是新例子。VC2003
💻 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 + -