1

我正在使用的 OpenGL 模型头文件包含以下定义:

static const float modelVertices[NUM_OBJECT_VERTEX * 3] = {}

static const float modelTexCoords[NUM_OBJECT_VERTEX * 2] = {}

static const float modelNormals[NUM_OBJECT_VERTEX * 3] = {}

static const unsigned short modelIndices[NUM_OBJECT_INDEX] = {}

在括号之间用逗号分隔的一堆数字(浮点数和整数,如合适)。

v, vt, vn将 .obj 文件转换为上述格式似乎很简单。我的 .obj 文件也有一堆f's,其中包括由 . 分隔的三元组/我不确定这些参数到底是什么......

我需要转换哪些参数才能获得第四个 - modelIndices?

(我需要提前承认我是 OpenGL 的新手,如果这看起来太初级,请道歉!)

4

1 回答 1

1

三胞胎只是面部定义。

如果你有 f 1 2 3

这意味着您有一个由索引 1 2 和 3 的顶点组成的三角形。

如果所有条目都是这样,这意味着您可以直接modelIndices用这些索引填充您的,并使用GL_TRIANGLES.

现在,如果它们通过/这种方式分开,则意味着您在顶点位置和纹理坐标和/或法线之间有不同的映射。

这是OpenGL 无法直接处理的事情,您可以采用的方法是将 texcoord 和法线数据分解为与顶点位置数组大小相同的数组。

要做到这一点很简单:这是伪代码:

read face data (triplets)
for each triplet
   read vertex indice
   read texcoord and normal indices
   fetch texcoord @ texcoord indice from your vt array
   store texcoord @ vertex indice in your modelTexCoords array
   fetch normal @ normal indice from your vn array
   store normal @ vertex indice in your modelTexCoords array

   etc

另请参阅维基百科的文档,它很好地解释了 .obj 格式:http ://en.wikipedia.org/wiki/Obj

于 2010-10-09T01:37:35.917 回答