关于解决Direct中不使用DXUT框架解决.x文件的纹理路径问题的解决

来源:互联网 发布:2016最新软件企业认定 编辑:程序博客网 时间:2024/06/02 00:43
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();
}
0 0
原创粉丝点击