【问题标题】:3D model files & creating triangle meshes from it3D 模型文件并从中创建三角形网格
【发布时间】:2012-12-11 15:30:34
【问题描述】:

我是新来的。我正在学习 C++,所以我对事物知之甚少(好吧,我有很多编程经验,但也有其他语言。我也知道如何使用计算机 xD)。我决定开始研究游戏引擎。我知道这并不容易,但这就是我想做这件事的原因之一 - 尝试/获得经验是我学习的最佳方式。

所以,我从渲染器开始,但我不知道如何制作一个 3D 模型文件,正如它在名称中所说的那样,它将有一个 3d 模型,并且可以加载到 C++ 中的三角形网格中引擎,我可以将它与 Direct3D 一起使用。除了告诉我如何开始之外,我不希望你做任何事情。

非常感谢您决定阅读本文并提供帮助。

【问题讨论】:

    标签: c++ model 3d geometry mesh


    【解决方案1】:

    这是一个很好的问题,而且听起来很正确,因为你和我 3 年前在同一个地方。我查看了可用于生成 3D 内容的各种应用程序。我不想花时间学习各种应用程序,因为我想编写我的游戏引擎。我找不到足够快的东西来学习让它值得我花时间(那是免费的)所以最后我把一些脚本放在一起来创建 3D 模型(顶点数组)。这些发展成一个 GUI 驱动的界面,发展成我自己的功能齐全的 3D 建模工具。现在,3 年后,我的游戏引擎处于次要地位,而 MeshCreator(请查看 http://www.MeshCreator.co.uk)现在是我正在进行的项目。

    您需要一种加载顶点数组的方法。 OBJ 文件(波前)是基于文本的并且相当容易阅读。 MeshCreator 的输出也是基于 ASCII 的,网站上有关于如何解释文件格式的详细信息。

    MeshCreator 的文件输出旨在轻松导入任何 3D 项目。您还可以查看 .OBJ 文件,因为大多数 3D 应用程序(包括我的)都支持它们。不过 OBJ 文件可能会有点复杂。

    简而言之,您需要一个易于使用的工具。我花了 3 年时间写自己的,所以我不推荐它。试试 MeshCreator、MilkShape 3D 和 Google Shetchup。此外,还有许多网站提供免版税的 3D 内容,您可以在项目中使用这些内容,其中许多都以 OBJ 格式提供。

    【讨论】:

      【解决方案2】:

      3D 模型文件格式可能非常复杂,主要是它们可以包含的大量事物类型(网格、图元、曲面、材质、照明等)。这也意味着你也很难想出自己的格式。所以,这里真的有两个选择:找到现成的库来处理模型的加载;或者,选择预先存在的格式并编写自己的代码来加载这些文件(并使用标准编辑器来创建它们)。

      使用现成库加载模型的主要问题通常是这些库通常与特定的渲染器密切相关,并且在加载文件时生成的(可能的)数据结构通常非常复杂.因此,只有当您准备采用该模型加载库所属的渲染器或与之相关的渲染器时,这通常是一个更好的解决方案。有 Irrlicht、Ogre3D、Coin3D 等选项,它们在加载相当标准的 3D 模型文件格式方面都具有合理的能力。

      如果您要选择预先存在的文件格式并自己创建加载代码(因此,与您自己的渲染器相关联),那么您应该谨慎选择。 3ds 文件格式使用非常广泛,其内部结构很好且相当简单,其优点是您可以轻松跳过尚不支持的元素(这在您逐步编写渲染代码时很有用)。大多数其他格式具有类似的功能(向前和向后兼容性,以及跳过“不支持”元素的能力)。还有一些重要的开放标准格式,vrml 和 x3d,您可能想看看。此外,还有一些与一些开源 3D 编辑器相关的更简单的格式,例如 Blender。拥有一个能够以您可以加载的文件格式输出的良好 3D 编辑器非常重要。这就是为什么您不应该创建自己的文件格式的原因,因为您将有很多额外的工作要做,无论是为某些 3D 编辑器创建自定义“导出”脚本(或插件),还是创建自己的编辑器(一个不朽的任务)。

      【讨论】:

      • 正如我上面已经问过的,使用 RenderWare 的 DFF/RWX 模型作为我自己的模型文件类型的基础怎么样?
      • @user1807624 有大量的 3D 模型文件格式。正如我所说,不要创建自己的(这样做没有意义),选择一个标准的、易于创建的(即,使用良好的 3D 编辑器,或在模型的在线目录中找到),并且具有你想要的那种功能。许多编辑器还可以为您完成导入-导出/转换工作,因此您真正需要的只是能够加载一种格式。 DFF/RWX 是一种选择(我不知道有多好),但可以考虑更多标准格式,例如 vrml、x3d、obj、3ds 或 blend。查看 Blender3D 导出​​的文件格式以获得良好的列表。
      • 我只是不知道哪个更好:3DS 还是 DFF(RWX)? (我不考虑 .obj 因为某种原因我不喜欢它)。
      • 我想我要做的是提供加载两者的能力。
      • @user1807624 collada 怎么样?它得到了广泛的支持,并为此而生。如果您接受整个配置文件,则很难解析。
      【解决方案3】:

      四处搜索。如果你想将你的引擎基于 DirectX,我相信 SDK 附带了解释基础知识的代码示例,例如加载网格。

      如果您只是学习 C++,我建议您从一个更简单的项目开始,例如使用 IrrlichtOGRE 这样的引擎制作一个简单的游戏,但这取决于您。

      【讨论】:

      • 我想从一个简单的游戏开始,但这对我来说没有任何兴趣。
      【解决方案4】:

      我认为你需要像obj files 这样的东西。您可以找到在线免费文件来玩。如果你想自己生成,我想你需要一些 3D 渲染软件。您还可以搜索如何解析它们并将它们的内容加载到您的程序中。

      【讨论】:

      • RenderWare DFF/RWX 模型怎么样,我可以用它作为我自己模型文件的基础。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      相关资源
      最近更新 更多