将.obj(或任何其他)文件中的网格加载到DirectX9 / C ++项目中

时间:2011-06-06 08:42:39

标签: c++ directx mesh directx-9

目前我有一个 3D立方体,我通过书写坐标绘制,可以旋转并在黑屏上移动。 现在我有一个我在“3Ds Max”创建的模型(这是一个有高石墙的小后院,所以我试图用它作为我的世界对象。)我想将此模型加载到 DirectX9 / C ++项目中。 就我在DirectX SDK示例中看到的,此代码用于加载 .X 模型(需要插件用于“3Ds Max”来导出这种扩展。我'我不确定这一点。)

将.X文件加载到DX9 / C ++中的代码:

D3DXLoadMeshFromX( "Tiger.x", D3DXMESH_SYSTEMMEM, 
            g_pd3dDevice, NULL, &pD3DXMtrlBuffer, NULL,
            &g_dwNumMaterials, &g_pMesh )

是否有像“D3DXLoadMeshFromOBJ(.....)”这样的函数来加载对象?如何加载和呈现 .OBJ 文件?图8(

我的另一个问题是 .X 文件和 .OBJ 文件之间有什么区别?我应该使用哪些文件?

2 个答案:

答案 0 :(得分:4)

AFAIK,DirectX不支持开箱即用的波前对象文件。为此,您需要一个外部网格加载器。

我记得,在DX 10 SDK中有一个如何加载 .obj 文件的示例,我认为该示例名为MeshFromOBJ10。我不知道它在DirectX 9中是否有用。

据我所知,标准 .x 只支持没有增强功能的基本网格,例如动画。如果您想尝试图形编程,那也不错,但如果您的目标是更高的概念,您可以稍后切换。我想你可以查看 .obj 文件here的优点。

为您正在使用的输入数据创建抽象始终是个好主意。例如,您可以创建一个类AbstractMesh和一个从中派生的实现XMesh。稍后,您可以添加其他实现,例如OBJMesh或类似的任何实现。

我希望我能帮到你一点:)快乐的编码!

答案 1 :(得分:1)

x文件格式完全支持动画,此外,当您想使用着色器时,它支持fx文件。您可以从此页面下载的导出器插件和示例:

http://www.cgdev.net/download.php