您的位置:首页 > 其它

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

2010-03-20 17:25 295 查看
要想从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]

)

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐