關於解決Direct中不使用DXUT框架解決.x文件的紋理路徑問題的解決

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;

            pMaterialsArray[i].Power = 1.0f;

//解決方法通過主程序指明當前.x文件存放的上級目錄,然後將紋理的名稱添加到目錄路徑上,如:可以通過程序指明路徑:media\DOOR\\,然後在for循環中動態添加紋理的名稱如'qianzhuang.jpg'最終將兩個字符串合併在一起,就得到了紋理的路徑即:media\DOOR\qiangzhuang,jpg

            lstrcatW(str,RTexturefilename);
            //將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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章