在DirectX3D程序中加载3DMAX的模型(后缀为.X的文件)

 要想从3DMAX中导出设计好的模型,通常需要自己用3DS Max SDK来创建自己的导出器, 而微软提供了一种导出格式.X,这种格式主要用于DirectX9, Directx10及以后都不支持这种格式。

 

第一步: 导出模型

首先我们需要将模型从3DMAX中导出来,这里推荐Pandasoft  - 将下载的插件放到3DS plugins目录下。这样你就可以在3DMAX中将模型保存成X类型的文件。

 

第二步:加载

我们使用D3DX的Mesh对象和接口。

 

LPD3DXBUFFER materialBuffer;
DWORD        numMaterials;           
LPD3DXMESH   mesh;

HRESULT hr=D3DXLoadMeshFromX(

                             filename,

                             D3DXMESH_SYSTEMMEM,
                             gD3dDevice,

                             NULL,
                             &materialBuffer,

                             NULL,

                             &numMaterials,
                             &mesh

                            );

D3DXMATERIAL* d3dxMaterials       = (D3DXMATERIAL*)materialBuffer->GetBufferPointer();

D3DMATERIAL9 *meshMaterials       = new D3DMATERIAL9[numMaterials];
LPDIRECT3DTEXTURE9 *meshTextures  = new LPDIRECT3DTEXTURE9[numMaterials];

 

第三步:渲染

for (DWORD i=0; i<m_numMaterials; i++)
{
  gD3dDevice->SetMaterial(&meshMaterials[i]);
  gD3dDevice->SetTexture(0,meshTextures[i]);
  m_mesh->DrawSubset( i );
}

for (DWORD i=0; i<m_numMaterials; i++)
{

 // 导出Material
 meshMaterials[i] = d3dxMaterials[i].MatD3D;

 // 设置ambient color 

 meshMaterials[i].Ambient = meshMaterials[i].Diffuse;
    
 // 如果有Texture存在,则创建

 meshTextures[i] = NULL;
 if (d3dxMaterials[i].pTextureFilename)
     D3DXCreateTextureFromFile(

                               gD3dDevice,

                               d3dxMaterials[i].pTextureFilename,    

                               &meshTextures[i]

                              )

}

阅读更多
文章标签: plugins null im 微软
想对作者说点什么? 我来说一句

3DMax 2014 导出.x文件

2014年09月12日 157KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭