【问题标题】:Loading meshes from .obj (or any other) File into DirectX9/C++ project将网格从 .obj(或任何其他)文件加载到 DirectX9/C++ 项目中
【发布时间】:2014-01-30 21:09:00
【问题描述】:

目前我有一个通过写坐标绘制的3D Cube,它可以在黑屏上旋转和移动。 现在我有一个我在 “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 文件有什么区别,我应该使用哪一个?

【问题讨论】:

    标签: c++ directx mesh directx-9


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您提供有用的信息...现在我将使用 .X 格式,直到我完全理解在 directX 中使用 3D 模型,例如在不旋转整个世界矩阵 8D 的情况下旋转它们。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多