从Blender加载.obj文件

时间:2013-03-21 07:58:49

标签: ios xcode opengl-es-2.0

我现在正在寻找相当长的时间来寻找可以导入的东西 Blender 3D .obj文件到xcode中,可以在iphone应用程序中使用它。

我无法找到如何在任何地方实现类似内容的描述!

我不想使用任何引擎。我只想知道我必须采取的步骤 满满的和基本的事情。

www上真的没什么。你可以找到2005年至2008年的文章 但这些都不是最新的,没有任何效果。

那么,有人知道该怎么做吗?

2 个答案:

答案 0 :(得分:0)

查看libgdx中的来源,并查看objloader。他构建了lib以便能够加载obj文件,并且应该可以跨多个平台(包括ios)工作。通过阅读源代码,您将看到为顶点创建对象加载器非常简单,但是当您开始关注法线和纹理坐标时会变得更加复杂。这是一个用于抓取obj文件的简单算法(我将离开解析相关的tpl文件以供读者自己研究):

  1. 读入文件行,丢弃所有以#开头的行(评论)
  2. 顶点看起来像:v 1.000 1.000 1.000,因此,如果行以'v '开头,则在空格上划分线并存储(并转换为浮点数)3浮点数作为顶点。
  3. 法线看起来像是:vn 1.000 1.000 1.000,因此,如果行以'vn '开头,请执行与数字2相同的操作,但要正常存储。
  4. 纹理坐标看起来像vt 1.000 1.000,可能有第3 [w]个值,以相同的方式拆分并存储该行。
  5. 现在它变得棘手了,有一些看起来像f 1/1/1 2/2/2 3/3/3的面部描述,它们描述了形状的每个顶点(通常它们是三角形)的3个顶点/ textcoords / normals(按此顺序)指数。最难的部分是obj文件类型使用三个索引而不是像opengl或direct3d这样的索引。因此,您必须按照顶点/坐标/法线的顺序进行随机播放,以便可以在源上使用索引绘图。
  6. E.g。基本上,你必须通过改组订单让f 1/300/30 40/22/400 20/30/10变得更像f 1/1/1 2/2/2 40/40/40

    This site为您提供了相同算法的概念,并向您展示了如何在高级算法中进行此操作的示例(在页面的中间位置),以及他为您引用的源代码可以找到here

    无论如何,如果您需要更多帮助,请告诉我。 :)

    编辑:

    顺便说一句,如果你看到这样的话:f 1//4 2//5 3//7不要惊慌,这是一个有效的文件,只是意味着(在这个例子中)没有纹理坐标

答案 1 :(得分:0)

我使用GLEssentials示例应用作为起点。它真的很简陋,但它是你想要开始的那种,所以你可以真正理解你决定稍后添加它的格式。

https://developer.apple.com/library/mac/#samplecode/GLEssentials/Introduction/Intro.html