【问题标题】:How to parse or load .obj file in JOGL? [closed]如何在 JOGL 中解析或加载 .obj 文件? [关闭]
【发布时间】:2016-01-28 15:57:43
【问题描述】:

我正在尝试将使用 3DS Max 制作的汽车对象加载到 JOGL 程序中,但我不知道该怎么做。我在网上搜索过,但没有得到很好的结果。

我试过this但没有结果。

是否有关于如何做到这一点的教程?或者如何编写自己的加载器?还是我可以使用的已经写好的课程?

【问题讨论】:

  • 欢迎来到 StackOverflow。这不是请求教程或查找现有代码的正确站点。如果您开始尝试,我们可以与您合作。
  • @Joey,欢迎来到 StackOverflow!我希望您发现这个社区和我一样有用。请查看stackoverflow.com/help/how-to-ask 以获取有关提出好问题的信息。此外,您可以通过阅读stackoverflow.com/tour 上的整个旅游页面获得一个快速简便的徽章,这还将为您提供大量对网站新手(如您自己)有用的信息。祝您有美好的一天!

标签: java opengl 3d jogl wavefront


【解决方案1】:

Here 是由Oskar Veerhoek 作为the Coding Universe website 的一部分用Java 编写的OBJ 格式的非常有限的加载器(但不幸的是使用较低级别的LWJGL 而不是JOGL)。您可以使用loadModel(File f) 方法或loadTexturedModel(File f) 方法将引用您的OBJ 文件的File 对象传递给该类。返回的Model 对象包含OBJ 文件描述的3D 模型。然后,您应该将Model 对象传递给提供的实用方法createTexturedDisplayList(Model m)createDisplayList(Model m)createVBO(Model model)。这些返回一个可渲染的顶点缓冲区对象或显示列表,然后您可以将其用作渲染的一部分。但是请注意,如果提供的方法不能满足您的需求,您可以将自己的 Model 编写为可渲染方法,但我强烈建议您先理解/阅读提供的方法。

另一种功能更全面的替代方法是the joglobj library,使用 JOGL 用 Ja​​va 编写。这个加载器更完整,但它在某些方面不能正确处理透明度和纹理。使用这个加载器需要this dependency(用来解析OBJ文件)。

另一种选择是the oObjLoader library,它“是一个用于解析和加载 WaveFront .OBJ 文件的 java 库。”

如果这些都不能满足您的需求,请参考其他类似的 SO 问题,例如 this question from user skaffman。此外,游戏开发特定堆栈交换是寻找类似相关问题的好地方。 This 是该部分中讨论正确加载 OBJ 文件的问题。

【讨论】:

  • 我投了反对票,因为您的第一个示例没有使用 JOGL,而有很多基于 JOGL 的示例,并且您建议的其他解决方案基于 JOGL 的一些过时版本,并且不如我们的构建完整-在装载机中。
  • 您的建议不是“如何编写自己的加载程序?”的答案。或“[是否有]我可以使用[使用 JOGL] 的已经编写好的类?”你为什么批评我给出了一个用低级 LWJGL 编写的易于阅读的示例类(本质上是一个纯 openGL 解决方案);您的回答包括最终基于超高级 jMonkeyEngine 的 Ardor3D 类的推荐。 IMO 高级场景图引擎对于初学者的示例来说不是一个好的选择。
  • 问题的标题清楚地提到了“在 JOGL”,而您的第一个示例需要 JOGL 和 Slick 的主要竞争对手(org.newdawn.slick.opengl.TextureLoader),而 JOGL 有自己的纹理加载器.然后,您的第一个示例不是纯 OpenGL 解决方案。问题是加载模型涉及一些超出 OpenGL 渲染的概念,不应该在任何绑定(甚至 JOGL)中实现,这就是为什么我的最后一个解决方案使用基于 JOGL 的场景图 API,但我的第一个解决方案只使用一类 JOGL,第二类使用 JOGL-Utils。
  • 此外,JogAmp 社区的一些成员(包括我)厌倦了人们在大量 StackOverflow 问题中宣传我们的主要竞争对手。
  • 抱歉,@gouessej,但是谁?我认为你反应过度;)
【解决方案2】:

我建议你阅读the Wikipedia article on Wavefront .obj file (and MTL),外部链接也很有趣,尤其是规范,它有助于理解这种 ASCII 文件格式,它的“命令”(v、vf、vn、vt、f、mtllib、usemtl , o, s, g, ...) 及其结构。

我引用的其他示例可以帮助您了解如何通过使用一些 JOGL 类或更高级的实用程序来解析文件并将您的数据转换为更“OpenGL 友好”的东西。

在 JOGL 中有一个 OBJ 加载器,在 JOGL-Utils 中有另一个:ObjReaderWaveFrontLoader

还有LibGDX OBJ loader。 LibGDX 有一个基于 JOGL 的非官方后端,由 @bgroenks、@xranby 和我积极维护。

您也可以使用JogAmp's Ardor3D Continuation(它在后台使用 JOGL),您可以查看 this simple exampleits WaveFront OBJ importer(它向您展示如何解析 OBJ 文件)ant its storage(它展示了如何将数据存储到一些结构中,以供以后使用 JOGL 进行绘制)。

N.B:我负责 JogAmp 社区的引擎支持,我在 list of the official maintainers 中,我是 JogAmp 的 Ardor3D Continuation 的主要贡献者,它不是 Ardor3D 的一个分支,而是一个“延续”。据其主要开发人员 Renanse 所述,旧版 Ardor3D 的开发已于 2014 年 3 月停止,如 here on his blog 所述。

【讨论】:

  • 此答案中推荐的 Ardor3D 库是由编写此答案的用户维护的一个分支(链接的 GitHub 存储库 gouessej 由名为 gouessej 的 GitHub 用户拥有)。根据此元帖子 (meta.stackexchange.com/questions/15787/…) 的建议,我添加了此说明,以避免任何人不知道自我推销。
  • gouessej 继续编辑他的帖子,添加了一堆东西,包括承认他正在推广自己的项目。我将保留我的其他评论,但请注意,由于后续编辑,它不再完全准确。
  • 我完全同意仔细听取建设性的批评意见,但我并没有“推广”我自己的项目(你已经忘记了我们的贡献者),而且这个引擎只在最后一个例子中提到过,甚至在我无数次之前后续编辑。
  • 如果提供的资源是免费的、开源的和社区驱动的,这不是自我推销。 @gouessej 没有使用他的存储库来从 OP 对它们的使用中获利或获利。他正在帮助社区成员使用该软件。仅当您自己的项目是商业产品时,您才真正需要承认它。
  • 他推荐了 Ardor3D,因为他“厌倦了人们在 StackOverflow 的众多问题中宣传 [他的] 主要竞争对手”,而不是简单地提供最正确的答案。我不喜欢未公开的利益冲突,所以我提请注意自我推销(定义为“......促进......一个人的活动”)。但是,我知道人们可能不同意我的意见,所以我只提请注意自我推销,让人们自己做决定。我并没有试图指责任何人,我只是试图将透明度提高到我认为应该达到的程度。
猜你喜欢
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 2018-06-18
相关资源
最近更新 更多