d3dfile.h
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:4k
源码类别:

游戏

开发平台:

Visual C++

  1. //-----------------------------------------------------------------------------
  2. // File: D3DFile.h
  3. //
  4. // Desc: Support code for loading DirectX .X files.
  5. //
  6. // Copyright (c) Microsoft Corporation. All rights reserved.
  7. //-----------------------------------------------------------------------------
  8. #ifndef D3DFILE_H
  9. #define D3DFILE_H
  10. #include <tchar.h>
  11. #include <d3d9.h>
  12. #include <d3dx9.h>
  13. //-----------------------------------------------------------------------------
  14. // Name: class CD3DMesh
  15. // Desc: Class for loading and rendering file-based meshes
  16. //-----------------------------------------------------------------------------
  17. class CD3DMesh
  18. {
  19. public:
  20.     TCHAR               m_strName[512];
  21.     LPD3DXMESH          m_pSysMemMesh;    // SysMem mesh, lives through resize
  22.     LPD3DXMESH          m_pLocalMesh;     // Local mesh, rebuilt on resize
  23.     
  24.     DWORD               m_dwNumMaterials; // Materials for the mesh
  25.     D3DMATERIAL9*       m_pMaterials;
  26.     LPDIRECT3DTEXTURE9* m_pTextures;
  27.     bool                m_bUseMaterials;
  28. public:
  29.     // Rendering
  30.     HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, 
  31.                     bool bDrawOpaqueSubsets = true,
  32.                     bool bDrawAlphaSubsets = true );
  33.     // Mesh access
  34.     LPD3DXMESH GetSysMemMesh() { return m_pSysMemMesh; }
  35.     LPD3DXMESH GetLocalMesh()  { return m_pLocalMesh; }
  36.     // Rendering options
  37.     void    UseMeshMaterials( bool bFlag ) { m_bUseMaterials = bFlag; }
  38.     HRESULT SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF );
  39.     HRESULT SetVertexDecl( LPDIRECT3DDEVICE9 pd3dDevice, D3DVERTEXELEMENT9 *pDecl );
  40.     // Initializing
  41.     HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice );
  42.     HRESULT InvalidateDeviceObjects();
  43.     // Creation/destruction
  44.     HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCTSTR strFilename );
  45.     HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPDIRECTXFILEDATA pFileData );
  46.     HRESULT Destroy();
  47.     CD3DMesh( LPCTSTR strName = _T("CD3DFile_Mesh") );
  48.     virtual ~CD3DMesh();
  49. };
  50. //-----------------------------------------------------------------------------
  51. // Name: class CD3DFrame
  52. // Desc: Class for loading and rendering file-based meshes
  53. //-----------------------------------------------------------------------------
  54. class CD3DFrame
  55. {
  56. public:
  57.     TCHAR      m_strName[512];
  58.     D3DXMATRIX m_mat;
  59.     CD3DMesh*  m_pMesh;
  60.     CD3DFrame* m_pNext;
  61.     CD3DFrame* m_pChild;
  62. public:
  63.     // Matrix access
  64.     void        SetMatrix( D3DXMATRIX* pmat ) { m_mat = *pmat; }
  65.     D3DXMATRIX* GetMatrix()                   { return &m_mat; }
  66.     CD3DMesh*   FindMesh( LPCTSTR strMeshName );
  67.     CD3DFrame*  FindFrame( LPCTSTR strFrameName );
  68.     bool        EnumMeshes( bool (*EnumMeshCB)(CD3DMesh*,void*), 
  69.                             void* pContext );
  70.     HRESULT Destroy();
  71.     HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice );
  72.     HRESULT InvalidateDeviceObjects();
  73.     HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, 
  74.                     bool bDrawOpaqueSubsets = true,
  75.                     bool bDrawAlphaSubsets = true,
  76.                     D3DXMATRIX* pmatWorldMartix = NULL);
  77.     
  78.     CD3DFrame( LPCTSTR strName = _T("CD3DFile_Frame") );
  79.     virtual ~CD3DFrame();
  80. };
  81. //-----------------------------------------------------------------------------
  82. // Name: class CD3DFile
  83. // Desc: Class for loading and rendering file-based meshes
  84. //-----------------------------------------------------------------------------
  85. class CD3DFile : public CD3DFrame
  86. {
  87.     HRESULT LoadMesh( LPDIRECT3DDEVICE9 pd3dDevice, LPDIRECTXFILEDATA pFileData, 
  88.                       CD3DFrame* pParentFrame );
  89.     HRESULT LoadFrame( LPDIRECT3DDEVICE9 pd3dDevice, LPDIRECTXFILEDATA pFileData, 
  90.                        CD3DFrame* pParentFrame );
  91. public:
  92.     HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCTSTR strFilename );
  93.     HRESULT CreateFromResource( LPDIRECT3DDEVICE9 pd3dDevice, LPCTSTR strResource, LPCTSTR strType );
  94.     // For pure devices, specify the world transform. If the world transform is not
  95.     // specified on pure devices, this function will fail.
  96.     HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, D3DXMATRIX* pmatWorldMatrix = NULL );
  97.     CD3DFile() : CD3DFrame( _T("CD3DFile_Root") ) {}
  98. };
  99. #endif