【问题标题】:Importing 3ds Max OBJ using C++使用 C++ 导入 3ds Max OBJ
【发布时间】:2011-05-31 21:13:45
【问题描述】:

我创建了一个 OBJ 加载器,它可以将从 3DS Max 导出的 .OBJ 文件导入我的简单 OpenGL 查看器/应用程序。其核心是在一些教程的帮助下编写的 Vector3.h。

它在我使用的几个模型上运行良好,但我想要使用的模型有一些不同的东西没有被考虑在内。它的顶点有 4 个点,而不是 3 个。这是我正在使用的线的示例:

g Box02
usemtl Wood_Bark
s 4
f 1/1/1 2/2/1 3/3/1 4/4/2
f 4/1/3 3/2/3 5/3/3 

第一条“f”线有 4 个我感兴趣的顶点。我的 Vertex3.h 采用 X、Y、Z。在我拥有的其他模型中,所有线都像第二条“f”线,只有 3 个元素.我得到一个顶点超出范围,所以当我去检查它发生的地方时,我看到它在这条线上,所以我假设因为这条线上有更多可以处理的数据。这是整个 Vertex3.h

http://pastebin.com/dgGSBSFe

这是失败的代码行。 vertices 是一个 Vector3。

tempVertices.push_back ( vertices[--vertex] );

我的问题是,第 4 点是什么?你会如何在我的 Vector3.h 文件中解释这一点?好像我需要创建一个 Vector4.h,如果只有 3 个就忽略第 4 个 var。但我想更多地了解我正在处理的事情,以及如何做到这一点的任何提示。第 4 个元素是 alpha 还是什么?在 Vector3.h 中的计算中应该如何使用,或者根本应该使用它?

【问题讨论】:

    标签: c++ 3dsmax


    【解决方案1】:

    为什么不只导出为三角形?在 3ds max 中转换为 EMesh,使所有边缘可见,导出。或者直接使用适当的 OBJ 导出选项。

    【讨论】:

      【解决方案2】:

      具有四个点的面称为四边形。通常如果你想渲染它,你应该把它分成两个三角形。

      例如,你有这个:

       ___
      |   |
      |   |
      |___|
      

      你需要把它变成这样:

       ___
      |\  |
      | \ |
      |__\|
      

      假设顶点逆时针方向(OpenGL 中的默认设置),从左上角开始,您可以制作两个三角形。第一个三角形的顶点将是四边形的第一个、第二个和第三个顶点。第二个三角形的顶点将是四边形的第三个、第四个和第一个顶点。

      【讨论】:

      • 我在想这可能是个问题,但这是由其他人创建的 3dsMax 模型。我没有应用程序或修复它的技能。我可能需要找一个知道怎么做的人。拍,我以为我可以自己解决。
      • @Hallik:我不是建议你改变模型。我建议您让代码在遇到四边形时自动拆分它们。
      • 好的,我将不得不考虑如何做到这一点。我知道我在某处读过总是将事物分解成三角形,但它的面也将法线和 UVW 存储在与顶点相同的线上,这让我很失望。需要重新训练我的思维。其中很多都是很新的。
      • @Hallik:只需像克隆顶点一样克隆法线和 UV。
      • 刚回来说,我的快速解决方法是从 3ds max 导出并在导出期间强制三角形。
      猜你喜欢
      • 2016-05-19
      • 2018-12-28
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 2012-03-29
      • 2013-01-25
      • 2013-12-06
      • 2021-03-19
      相关资源
      最近更新 更多