CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  游戏开发

请问读取x文件的D3DXLoadMeshFromX的unicode版本的超级郁闷问题

楼主limiteee(无限电)2005-03-03 23:03:16 在 专题开发/技术/项目 / 游戏开发 提问

这个一个很经典的读取x文件mesh段落,很多教程都用这个,  
  但是我把项目改为unicode编译,就会出错,说LPSTR不能转换为LPWSTR  
  问题出在D3DXMATERIAL的pTextureFilename成员,它是LPSTR,在UNICODE下,  
  它还是LPSTR,而D3DXCreateTextureFromFile需要的是LPWSTR了  
   
  LPD3DXBUFFER   pD3DXMtrlBuffer;  
  //从.x文件创建Mesh对象  
  ::D3DXLoadMeshFromX(  
  m_pFileName,   D3DXMESH_SYSTEMMEM,   m_pDevice,    
  NULL,   &pD3DXMtrlBuffer,   NULL,  
  &m_dwNumSubsets, //返回模型中子集的数目  
  &m_pMesh   ); //返回Mesh对象的接口指针  
   
  m_pMeshMaterials   =   new   D3DMATERIAL9[m_dwNumSubsets];  
  m_pMeshTextures   =   new   LPDIRECT3DTEXTURE9[m_dwNumSubsets];  
   
  //从接口指针pD3DXMtrlBuffer获得各个子集的材质和纹理图片的文件名  
  D3DXMATERIAL*   d3dxMaterials   =   (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();  
  for(   DWORD   i=0;   i   <   m_dwNumSubsets;   i++   )  
  {  
  //复制子集的材质  
  m_pMeshMaterials[i]   =   d3dxMaterials[i].MatD3D;  
  //Direct3D在调入Mesh模型时,没有设置材质的环境光颜色,  
  //这里把它设置成和漫反射一样的颜色。  
  m_pMeshMaterials[i].Ambient   =   m_pMeshMaterials[i].Diffuse;  
   
  //调入纹理图片,这里出错!!!!!!!!!!!  
  ::D3DXCreateTextureFromFile(  
  m_pDevice,  
  d3dxMaterials[i].pTextureFilename, //纹理图片的文件名,就是这个参数,它竟然没有unicode版本  
  &m_pMeshTextures[i]   );  
  }  
  pD3DXMtrlBuffer->Release(); //释放接口  
   
  问题点数:20、回复次数:4Top

1 楼iwaiwai()回复于 2005-03-04 08:57:30 得分 20

参见sdk的effectedit  
   
  你search“D3DXCreateTextureFromFile”函数  
  将会发现它将第二个参数定义为TCHAR  
  你也转换一下就ok了!Top

2 楼limiteee(无限电)回复于 2005-03-04 10:31:59 得分 0

可是有一个问题  
   
  D3DXMATERIAL是从LPD3DXBUFFER   里读出来的,D3DXMATERIAL是d3d自带的类型  
   
  就算是我去d3dx9mesh.h中把D3DXMATERIAL的定义改成tchar,那LPD3DXBUFFER   读出来的是tchar么?Top

3 楼limiteee(无限电)回复于 2005-03-04 10:41:29 得分 0

找到答案了,谢谢上面那位兄台了  
   
                  WCHAR   strPath[512];  
                  if(   d3dxMaterials[i].pTextureFilename   !=   NULL   )  
                  {  
                          WCHAR   wszBuf[MAX_PATH];  
                          MultiByteToWideChar(   CP_ACP,   0,   d3dxMaterials[i].pTextureFilename,   -1,   wszBuf,   MAX_PATH   );  
                          wszBuf[MAX_PATH   -   1]   =   L'\0';  
                          DXUTFindDXSDKMediaFileCch(   strPath,   512,   wszBuf   );  
   
                          //   Load   the   texture  
                          D3DXCreateTextureFromFile(   pd3dDevice,   strPath,   &g_ppMeshTextures[i]   );  
  Top

4 楼iwaiwai()回复于 2005-03-04 20:41:14 得分 0

偶是女的,不是兄台  
   
  呵呵Top

相关问题

  • int i=5;sprint("%d,%d",++x * ++x * ++x * --x,++x); who can answer this question?
  • 哪位有解f = a*x*x+b*y*y+c*x*y+d*x+e*y+g的代码啊???
  • _UNICODE
  • d
  • d
  • d
  • x
  • d
  • 如何解析((a + b - (a * b) % (c + d)) / x - y + (w * z))的結果?
  • 如何解析((a + b - (a * b) % (c + d)) / x - y + (w * z))的結果?

关键词

  • 文件
  • 接口
  • unicode
  • null
  • d3
  • dxmaterials
  • wszbuf
  • pd3dxmtrlbuffer
  • dwnumsubsets
  • dxcreatetexturefromfile

得分解答快速导航

  • 帖主:limiteee
  • iwaiwai

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo