关于解决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;
//将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();
}
0 0
- 关于解决Direct中不使用DXUT框架解决.x文件的纹理路径问题的解决
- 解决导入dxut.h等文件的未知错误 && 路径问题
- 关于C#Image.FromFile文件不释放问题的解决
- 单元测试中解决不同环境下的文件路径问题
- 解决压缩包中带文件路径的问题
- 解决netbean资源文件的路径问题
- 关于Eclipse中项目提示错误而文件不显示错误问题的解决
- 关于文件读入的问题与解决
- 实际的解决路径问题
- jsp路径问题的解决
- 关于解决caffe中draw_net无法使用的问题
- 解决tinyos1.x中tinyviz不显示节点的方法
- 关于asp.net无法访问UNC路径文件的解决
- 关于asp.net无法访问UNC路径文件的解决
- 关于asp.net无法访问UNC路径文件的解决
- 关于wordpress网站文件存放路径的一点疑问解决
- 解决Struts1.x中使用Validator框架对DispatchAction不同方法使用不同的字段验证
- 解决Struts1.x中使用Validator框架对DispatchAction不同方法使用不同的字段验证
- java代码优化
- ASP.NET中JSON的序列化和反序列化
- 温故知新C++学习二
- C++中父类和子类的指针互相指向
- 共享锁和排他锁
- 关于解决Direct中不使用DXUT框架解决.x文件的纹理路径问题的解决
- 华丽的HTML5/jQuery动画和应用 前端必备
- 二分图的最大匹配、完美匹配和匈牙利算法
- LCS
- ava.net.BindException: Problem binding to [ubuntu-master:9000] java.net.BindException: 地址已在使用; For m
- 【学生管理系统】EOF和BOF
- hdu 1026 Ignatius and the Princess I BFS
- (36)JS运动之使物体向右运动
- 手机管理应用研究【5】——应用杂篇