3

我正在使用 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 开始!”是什么意思?

谢谢。

4

2 回答 2

4

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

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

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

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

于 2010-12-03T14:49:01.613 回答
0

波前 .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 ...

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

于 2020-08-06T02:39:33.617 回答