void EnemyModel::GetMesh(IDirect3DDevice9 *Device, LPCWSTR filename,LPWSTR Texturename)
{
if(FAILED(D3DXLoadMeshFromX((filename), D3DXMESH_MANAGED, Device, &pAdjacencyBuffer, &pMaterialsBuffer, NULL, &numMaterials, &mesh)))
{
MessageBox(NULL, L"装入敌人.x文件失败", NULL, 1);
}
pD3DMaterial = (D3DXMATERIAL*)pMaterialsBuffer->GetBufferPointer(); //将材质与纹理缓冲区的地址赋给扩展后的材质缓冲区
if(pD3DMaterial != NULL)
{
pMaterialsArray = new D3DMATERIAL9[numMaterials];
pTextureArray = new IDirect3DTexture9*[numMaterials];
LPWSTR RTexturefilename=Texturename;
for(int i=0; i<(int)numMaterials; i++)
{
wchar_t str[1000]={0};
pMaterialsArray[i] = pD3DMaterial[i].MatD3D;
pMaterialsArray[i].Diffuse = CampusEngine_Common::WHITE;
pMaterialsArray[i].Emissive = CampusEngine_Common::WHITE;
//将LPSTR转化为宽字节解决纹理路径
int dwNum=MultiByteToWideChar(CP_ACP,0,pD3DMaterial[i].pTextureFilename,-1,NULL,0);
wchar_t *pwText=new wchar_t[dwNum];
MultiByteToWideChar(CP_ACP,0,pD3DMaterial[i].pTextureFilename,-1,pwText,dwNum);
lstrcatW(str, pwText);
if(pD3DMaterial[i].pTextureFilename != 0)
{
if(FAILED(D3DXCreateTextureFromFile(Device,str, &pTextureArray[i])))//FilePahtName
{
pTextureArray[i] = NULL;
RTexturefilename=Texturename;
}
}
else
{
pTextureArray[i] = NULL;
}
}
}
else
{ MessageBox(NULL, L"pD3DMaterial = NULL!", NULL, 1); }
pAdjacencyBuffer->Release();
pMaterialsBuffer->Release();
}
{
if(FAILED(D3DXLoadMeshFromX((filename), D3DXMESH_MANAGED, Device, &pAdjacencyBuffer, &pMaterialsBuffer, NULL, &numMaterials, &mesh)))
{
MessageBox(NULL, L"装入敌人.x文件失败", NULL, 1);
}
pD3DMaterial = (D3DXMATERIAL*)pMaterialsBuffer->GetBufferPointer(); //将材质与纹理缓冲区的地址赋给扩展后的材质缓冲区
if(pD3DMaterial != NULL)
{
pMaterialsArray = new D3DMATERIAL9[numMaterials];
pTextureArray = new IDirect3DTexture9*[numMaterials];
LPWSTR RTexturefilename=Texturename;
for(int i=0; i<(int)numMaterials; i++)
{
wchar_t str[1000]={0};
pMaterialsArray[i] = pD3DMaterial[i].MatD3D;
pMaterialsArray[i].Diffuse = CampusEngine_Common::WHITE;
pMaterialsArray[i].Emissive = CampusEngine_Common::WHITE;
pMaterialsArray[i].Power = 1.0f;
//解决方法:通过主程序指明当前.x文件存放的上级目录,然后将纹理的名称添加到目录路径上,如:可以通过程序指明路径:media\DOOR\\,然后在for循环中动态添加纹理的名称如'qianzhuang.jpg'最终将两个字符串合并在一起,就得到了纹理的路径即:media\DOOR\qiangzhuang,jpg
//将LPSTR转化为宽字节解决纹理路径
int dwNum=MultiByteToWideChar(CP_ACP,0,pD3DMaterial[i].pTextureFilename,-1,NULL,0);
wchar_t *pwText=new wchar_t[dwNum];
MultiByteToWideChar(CP_ACP,0,pD3DMaterial[i].pTextureFilename,-1,pwText,dwNum);
lstrcatW(str, pwText);
if(pD3DMaterial[i].pTextureFilename != 0)
{
if(FAILED(D3DXCreateTextureFromFile(Device,str, &pTextureArray[i])))//FilePahtName
{
pTextureArray[i] = NULL;
RTexturefilename=Texturename;
}
}
else
{
pTextureArray[i] = NULL;
}
}
}
else
{ MessageBox(NULL, L"pD3DMaterial = NULL!", NULL, 1); }
pAdjacencyBuffer->Release();
pMaterialsBuffer->Release();
}