.x 文件是由3dsmax导出的,专门被direct3D使用。
      一个.x文件包含:n 个 D3DXMATERIAL 类型的数据,每个D3DXMATERIAL包含一个D3DMATERIAL9 和 一个texture文件的路径。也就是说一个.x文件包含n个material 和 n 个texture文件路径。
      加载过程如下:

加载.x文件    LPD3DXBUFFER pMeshMaterialsBuffer = NULL;
        // 先将.x文件的数据存到buffer中,并得到material的个数,即D3DXMATERIAL的个数
加载.x文件    
if ( FAILED(D3DXLoadMeshFromX(L"rect.x",D3DXMESH_SYSTEMMEM,pd3dDevice,
加载.x文件                        NULL,
&pMeshMaterialsBuffer,NULL,&g_numMaterials,&g_pRectMesh)) )
Release();

        这里有一个问题折腾了我半天:由于使用DXUT,程序必须使用unicode ,D3dxCreateTextureFromFile 转换为D3DXCreateTextureFromFileW,第2个参数的类型由LPSTR变为LPWSTR。我需要将pTextureFileName的类型由ansi转为unicode 。一上来我用强转的方法:(LPWSTR)pMaterial[i].pTextureFileName,无法得到正确的路径,接着我想到用atl的A2W,但一直没有正确导入a2w的相关文件,总报错。没办法,看看A2W是咋写的。原来A2W先从栈上分配一段内存作为buffer,然后调用MultiByteToWideChar,用buffer得到unicode版的字符串。好了,照猫画猫,一切ok!

相关文章:

  • 2021-10-19
  • 2021-10-05
  • 2021-05-18
  • 2022-12-23
  • 2021-11-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-10
  • 2022-12-23
  • 2022-01-04
  • 2022-12-23
  • 2021-11-25
相关资源
相似解决方案