|
|
我编了一个程序装入一个x文件,其中部分代码如下
class CD3DMesh
{
public:
TCHAR m_strName[512];
LPD3DXMESH m_pSysMemMesh,ppMesh; // SysMem mesh, lives through resize
LPD3DXMESH m_pLocalMesh; // Local mesh, rebuilt on resize
DWORD m_dwNumMaterials; // Materials for the mesh
D3DMATERIAL9* m_pMaterials;
LPDIRECT3DTEXTURE9* m_pTextures;
bool m_bUseMaterials;
LPD3DXBUFFER pD3DXMtrlBuffer;
DWORD g_dwNumMaterials;
LPD3DXMESH pMesh;
public:
// Rendering
HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice,
bool bDrawOpaqueSubsets = true,
bool bDrawAlphaSubsets = true );
HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, TCHAR* strFilename );
CD3DMesh( TCHAR* strName = _T("CD3DFile_Mesh") );
virtual ~CD3DMesh();
};
其中create函数如下
HRESULT CD3DMesh::Create( LPDIRECT3DDEVICE9 pd3dDevice, TCHAR* strFilename )
{
TCHAR strPath[MAX_PATH];
LPD3DXBUFFER pAdjacencyBuffer = NULL;
LPD3DXBUFFER pMtrlBuffer = NULL;
xxxxxxxxx: m_dwNumMaterials=0;
HRESULT hr;
// Find the path for the file, and convert it to ANSI (for the D3DX API)
DXUtil_FindMediaFileCb( strPath, sizeof(strPath), strFilename );
// Load the mesh
if( FAILED(hr= D3DXLoadMeshFromX( strPath, D3DXMESH_SYSTEMMEM, pd3dDevice,
&pAdjacencyBuffer, &pMtrlBuffer, NULL,
&m_dwNumMaterial,&ppMesh ) ) )
{
return hr;
}
return hr;
}
当我用下面的语句时
CD3DMesh * m_ptiger;
if( FAILED( m_ptiger->Create( m_pd3dDevice, _T("tiger.x")) ) )
return D3DAPPERR_MEDIANOTFOUND;
总是出错,unhandled exception in aa.exe xc0000005:ACCESS Violation
我设了断点,发现是在xxxxxxxxx行m_dwNumMaterials=0;处出错的(上面标记了),实在想不通,那位高手请指点一下,不胜感激
谢谢
|
|