MFC下的DirectX9编程,载入mesh遇到有关问题
【求助】MFC下的DirectX9编程,载入mesh遇到问题
pD3DXMtrlBuffer->Release(); //释放接口
按照pdf上的学习,发现前面没什么问题,知道这个释放语句执行出错
百度下,没有类似问题,有人能给我解答下吗?谢谢!
--------------------------------------------
//我们将通过该接口指针访问Mesh对象的材质和纹理
LPD3DXBUFFER pD3DXMtrlBuffer = NULL;
//从.x 文件创建Mesh对象
::D3DXLoadMeshFromX(
"tiger.x", D3DXMESH_SYSTEMMEM, m_pDevice,
NULL, &pD3DXMtrlBuffer, NULL,
&m_dwNumSubsets, //返回模型中子集的数目
&m_pMesh); //返回Mesh对象的接口指针
m_pMeshMaterials = new D3DMATERIAL9[m_dwNumSubsets];
m_pMeshTextures = new LPDIRECT3DTEXTURE9[m_dwNumSubsets];
//从接口指针pD3DXMtrlBuffer获得各个子集的材质和纹理图片的文件名
D3DXMATERIAL *d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
for(DWORD i=0; i<m_dwNumSubsets; i++)
{
//复制子集的材质
m_pMeshMaterials[i] = d3dxMaterials[i].MatD3D;
//Direct3D在调入Mesh模型时,没有设置材质的环境光颜色,这里把它设置成和漫反射一样的颜色。
m_pMeshMaterials[i].Ambient = m_pMeshMaterials[i].Diffuse;
//调入纹理图片
::D3DXCreateTextureFromFile(
m_pDevice,
d3dxMaterials[i].pTextureFilename, //纹理图片的文件名
&m_pMeshTextures[i]);
}
pD3DXMtrlBuffer->Release(); //释放接口 @@这里出错,百度下发现也都是这么个写法,怎么会出错?
-------------------------------------------------------------
源代码地址: d.1tpan.com/tp1173791690
------解决方案--------------------
你把::D3DXCreateTextureFromFile(
m_pDevice,
d3dxMaterials[i].pTextureFilename, //纹理图片的文件名
&m_pMeshTextures[i]);
}
这段代码注释,看看释放还出错不.
另外检查一下::D3DXLoadMeshFromX(
"tiger.x", D3DXMESH_SYSTEMMEM, m_pDevice,
NULL, &pD3DXMtrlBuffer, NULL,
&m_dwNumSubsets, //返回模型中子集的数目
&m_pMesh);
的各个参数是否正确,返回值是否正常
------解决方案--------------------
把D3DXLoadMeshFromX第2个参数改为D3DXMESH_MANAGED试下啦
pD3DXMtrlBuffer->Release(); //释放接口
按照pdf上的学习,发现前面没什么问题,知道这个释放语句执行出错
百度下,没有类似问题,有人能给我解答下吗?谢谢!
--------------------------------------------
//我们将通过该接口指针访问Mesh对象的材质和纹理
LPD3DXBUFFER pD3DXMtrlBuffer = NULL;
//从.x 文件创建Mesh对象
::D3DXLoadMeshFromX(
"tiger.x", D3DXMESH_SYSTEMMEM, m_pDevice,
NULL, &pD3DXMtrlBuffer, NULL,
&m_dwNumSubsets, //返回模型中子集的数目
&m_pMesh); //返回Mesh对象的接口指针
m_pMeshMaterials = new D3DMATERIAL9[m_dwNumSubsets];
m_pMeshTextures = new LPDIRECT3DTEXTURE9[m_dwNumSubsets];
//从接口指针pD3DXMtrlBuffer获得各个子集的材质和纹理图片的文件名
D3DXMATERIAL *d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
for(DWORD i=0; i<m_dwNumSubsets; i++)
{
//复制子集的材质
m_pMeshMaterials[i] = d3dxMaterials[i].MatD3D;
//Direct3D在调入Mesh模型时,没有设置材质的环境光颜色,这里把它设置成和漫反射一样的颜色。
m_pMeshMaterials[i].Ambient = m_pMeshMaterials[i].Diffuse;
//调入纹理图片
::D3DXCreateTextureFromFile(
m_pDevice,
d3dxMaterials[i].pTextureFilename, //纹理图片的文件名
&m_pMeshTextures[i]);
}
pD3DXMtrlBuffer->Release(); //释放接口 @@这里出错,百度下发现也都是这么个写法,怎么会出错?
-------------------------------------------------------------
源代码地址: d.1tpan.com/tp1173791690
------解决方案--------------------
你把::D3DXCreateTextureFromFile(
m_pDevice,
d3dxMaterials[i].pTextureFilename, //纹理图片的文件名
&m_pMeshTextures[i]);
}
这段代码注释,看看释放还出错不.
另外检查一下::D3DXLoadMeshFromX(
"tiger.x", D3DXMESH_SYSTEMMEM, m_pDevice,
NULL, &pD3DXMtrlBuffer, NULL,
&m_dwNumSubsets, //返回模型中子集的数目
&m_pMesh);
的各个参数是否正确,返回值是否正常
------解决方案--------------------
把D3DXLoadMeshFromX第2个参数改为D3DXMESH_MANAGED试下啦