{
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();
}