【问题标题】:Loading 'indices' from Wavefront OBJ format从 Wavefront OBJ 格式加载“索引”
【发布时间】:2023-03-27 09:15:01
【问题描述】:

我正在使用 OpenGL ES 2.0 开发一个 Android 应用程序。

我想以 Wavefront OBJ 格式加载使用 Blender 2.49b 制作的导出文件。我已经确定了顶点位置、法线和纹理。

我想使用 glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices) 来绘制我的网格,但我不知道如何从 Wavefront OBJ 文件中获取最后一个参数索引。

面孔是我正在寻找的“指数”吗?

我在一个论坛上找到了这个: faces = 从 1 开始的索引!

“从 1 开始!”是什么意思?

谢谢。

【问题讨论】:

    标签: android wavefront opengl-es-2.0


    【解决方案1】:

    这意味着第一个索引是 1 而不是 0。 Java/C 数组/集合使用基于零的索引,并且第一个元素从零开始。 Wavefront OBJ 格式索引以 1 开头。

    面由 3 个值 v/vt/vn 组成,它们是索引。索引不是直接在文件格式中指定的。相反,它是文件中 v、vt、vn 元素出现的顺序。因此,在解析文件时,您必须跟踪遇到的顶点、顶点纹理和顶点法线的数量。

    有关格式的所有详细信息,您需要查阅规范。

    http://www.martinreddy.net/gfx/3d/OBJ.spec

    【讨论】:

      【解决方案2】:

      wavefront .obj 格式没有索引。 当您从文件加载网格数据时,您是指定索引的人。 我要做的是:

      iterate per face:
          iterate every vertex of a face
              assign index here when you store the data to your own project's vector
      

      换句话说,对于这些行中的每一行:

      f 3/55/23 34/2/12 34/43/128
      f ...
      

      为每个三元组属性引入一个新顶点(存储在顶点缓冲区中)和一个新索引(存储在索引缓冲区中)。

      【讨论】:

        猜你喜欢
        • 2013-04-24
        • 2015-08-15
        • 2020-02-20
        • 2017-09-28
        • 2012-07-14
        • 2014-08-26
        • 1970-01-01
        • 2016-08-27
        • 2017-06-27
        相关资源
        最近更新 更多