ZFXMeshX.cpp
上传用户:junlon
上传日期:2022-01-05
资源大小:39075k
文件大小:2k
源码类别:

DirextX编程

开发平台:

Visual C++

  1. #include "StdAfx.h"
  2. #include ".zfxmeshx.h"
  3. ///////////////////CZFXMesh class implementation////////////////////////////////////////////////////
  4. CZFXMesh::CZFXMesh()
  5. {
  6. m_dwMtrl = 0;
  7. m_pMeshMtrl = NULL;
  8. m_pMesh = NULL;
  9. m_pTexture = NULL;
  10. }
  11. CZFXMesh::~CZFXMesh()
  12. {
  13. Release();
  14. }
  15. void CZFXMesh::Release()
  16. {
  17. SAFE_DELETE( m_pMeshMtrl );
  18. SAFE_RELEASE( m_pMesh );
  19. SAFE_RELEASE( m_pTexture );
  20. for(DWORD i=0;i<m_dwMtrl;i++)
  21. SAFE_RELEASE( m_ppTextureFromMesh[i] );
  22. }
  23. HRESULT CZFXMesh::LoadMeshFromFile( LPDIRECT3DDEVICE9 pd3dDevice, LPCTSTR strFileName, bool bTextureCreateFromMesh, 
  24. DWORD options )
  25. {
  26. HRESULT hr;
  27. ID3DXBuffer* pMtrlBuffer;
  28. if( FAILED( hr = D3DXLoadMeshFromX( strFileName, options, pd3dDevice,
  29. NULL, &pMtrlBuffer, NULL, &m_dwMtrl, &m_pMesh )))
  30. return hr;
  31. D3DXMATERIAL* pMtrlInBuf = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer();
  32. m_pMeshMtrl = new D3DMATERIAL9[m_dwMtrl];
  33. for(DWORD i=0;i<m_dwMtrl;i++)
  34. {
  35. m_pMeshMtrl[i] = pMtrlInBuf[i].MatD3D;
  36. }
  37. if( (m_bTextureCreateFromMesh = bTextureCreateFromMesh ) == true )
  38. {
  39. m_ppTextureFromMesh = new LPDIRECT3DTEXTURE9[m_dwMtrl];
  40. for(DWORD i=0;i<m_dwMtrl;i++)
  41. {
  42. if( NULL != pMtrlInBuf[i].pTextureFilename )
  43. {
  44. D3DXCreateTextureFromFileA( pd3dDevice, pMtrlInBuf[i].pTextureFilename, &m_ppTextureFromMesh[i] );
  45. }
  46. else
  47. {
  48. m_ppTextureFromMesh[i] = NULL;
  49. }
  50. }
  51. }
  52. return hr;
  53. }
  54. HRESULT CZFXMesh::CreateTextureFromFile( LPDIRECT3DDEVICE9 pd3dDevice, LPCTSTR strFileName )
  55. {
  56. return D3DXCreateTextureFromFile( pd3dDevice, strFileName, &m_pTexture );
  57. }
  58. void CZFXMesh::OnRender( LPDIRECT3DDEVICE9 pd3dDevice )
  59. {
  60. for(DWORD i=0;i<m_dwMtrl;i++)
  61. {
  62. if( m_bTextureCreateFromMesh )
  63. pd3dDevice->SetTexture( 0, m_ppTextureFromMesh[i]);
  64. else
  65. pd3dDevice->SetTexture( 0, m_pTexture );
  66. pd3dDevice->SetMaterial( &m_pMeshMtrl[i] );
  67. m_pMesh->DrawSubset(i);
  68. }
  69. }
  70. ///////////////////CZFXMesh class implementation End////////////////////////////////////////////////////