关于解决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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值