首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

D3D加载.x资料,不能显示材质

2013-01-09 
D3D加载.x文件,不能显示材质加载。x文件后无法加载材质,不知道为什么,希望大家帮帮忙,试过用panda导出。x文

D3D加载.x文件,不能显示材质
加载。x文件后无法加载材质,不知道为什么,希望大家帮帮忙,
试过用panda导出。x文件的材质时使用完整路径,那样可以显示材质,
但是使用相对路径时,把二者放到同一文件夹下仍然找不到材质。调了许久不知为什么,望大家帮帮忙
以下是我的代码:
#include "Mesh.h"


CMesh::CMesh(LPDIRECT3DDEVICE9 d3dDevice)
{
m_pd3dDevice = d3dDevice;
m_dwNumMaterials = 0;
m_Mesh = NULL;
}

CMesh::~CMesh()
{
SAFE_RELEASE(m_Mesh);
SAFE_RELEASE(m_pd3dDevice);
}

 void CMesh::InitMesh(const char*FilePath)
{
LPD3DXBUFFER mtrlBuffer = 0;
LPD3DXBUFFER adjBuffer = 0;

if (FAILED(D3DXLoadMeshFromX(
FilePath,
D3DXMESH_MANAGED,
m_pd3dDevice,
&adjBuffer,
&mtrlBuffer,
0,
&m_dwNumMaterials,
&m_Mesh)))
{
return;
}

D3DXMATERIAL* mtrls = (D3DXMATERIAL*)mtrlBuffer->GetBufferPointer();
for (DWORD i=0; i<m_dwNumMaterials; i++)
{
mtrls[i].MatD3D.Ambient = mtrls[i].MatD3D.Diffuse;
m_MeshMaterials.push_back(mtrls[i].MatD3D);

LPDIRECT3DTEXTURE9 texture = 0;

if (FAILED(D3DXCreateTextureFromFile(m_pd3dDevice,
mtrls[i].pTextureFilename,
&texture)))
{
m_MeshTextures.push_back(0);
}else
{
m_MeshTextures.push_back(texture);
}

}

mtrlBuffer->Release();
adjBuffer->Release();

}
void CMesh::Render()
{
D3DXMATRIX matTrans,matScaling;
D3DXMatrixTranslation(&matTrans, 0.0f , 0.0f , 0.0f );
D3DXMatrixScaling(&matScaling,0.1f,0.1f,0.1f);
D3DXMatrixMultiply(&matTrans,&matScaling,&matTrans);
m_pd3dDevice->SetTransform(D3DTS_WORLD, &matTrans);

m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);

for (DWORD i = 0;i<m_dwNumMaterials;i++)
{
m_pd3dDevice->SetMaterial(&m_MeshMaterials[i]);
m_pd3dDevice->SetTexture(0,m_MeshTextures[i]);
//线性过滤
m_pd3dDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);
m_pd3dDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
m_Mesh->DrawSubset(i);

D3DXMatrixScaling(&matTrans,10.0f,10.0f,10.0f);
m_pd3dDevice->SetTransform(D3DTS_WORLD, &matTrans);
m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
}
}



使用断点调过,发现只要是相对路径
D3DXCreateTextureFromFile(m_pd3dDevice,mtrls[i].pTextureFilename,&texture)))
总是返回fail,绝对路径时就不会fail,不清楚哪里出错了
[解决办法]
D3DXCreateTextureFromFile肯定找不到文件,因为mtrls[i].pTextureFilename只是一个文件名,没有路径,所有肯定会加载失败,应该是先获取文件路径并创建字符串,令这个字符串="路径+mtrls[i].pTextureFilename“最后再调用D3DXCreateTextureFromFile并把着个字符串传递给他。

热点排行