在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]
)
}
第一步: 导出模型
首先我们需要将模型从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]
)
}
相关文章推荐
- 在程序中加载解析3DS文件,显示三维模型(c# MDX),
- VS2013 编译程序时报无法加载PDB文件错误解决方案
- Visual Studio 2010不能创建数据库连接出现:未能加载文件或程序集
- 关于 未能加载文件或程序集“ImageMagickNet”或它的某一个依赖项。试图加载格式不正确的程序 的解决办法
- 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。
- 未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序
- spring3.0 断网情况下 程序报错Spring如何加载XSD文件(org.xml.sax.SAXParseException: Failed to read schema document错误的
- 未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。
- VS2012 编译程序时报无法加载PDB文件错误解决方案
- java项目中程序加载配置文件的几种写法
- 发布MVCIIS报错未能加载文件或程序
- 未能加载文件或程序集“OSCommunicationLib”或它的某一个依赖项。试图加载格式不正确的程序。
- 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。
- OpenCV 编译程序时未加载PDB文件
- [解决方案]未能加载文件或程序集
- makefile 中指定程序运行时加载的库文件路径
- 懒加载中 把JSON文件转模型,复制给控制器的模型属性
- Win7系统中bat 后缀文件关联程序恢复
- 安装服务时遇到 System.BadImageFormatException: 未能加载文件或程序集
- 黄聪:VS2010启动程序提示文件加载 使用 简体中文(GB2312)编码加载文件解决办法