如何从.obj面派生索引缓冲区?

时间:2017-01-11 10:08:01

标签: opengl graphics directx wavefront

我正在努力弄清楚如何从Wavefront目标文件创建索引缓冲区。我知道面部可以由任意数量的顶点组成,例如:

f 1 2 3 4
f 2 3 4 5

我如何识别构建三角形的正确方法?

1 个答案:

答案 0 :(得分:2)

如果查看OBJ文件,面部定义如下所示:

f 1//1 2//2 3//3

以f(ace)指示符开头的每一行都定义了一个原语。在这种情况下,存在由空格分隔的3个部分。每个部分定义一个顶点。如果每个脸部有3个这样的部分,您就知道脸部必须是三角形。如果它是4,则脸部是四边形(虽然这种格式现在相对不常见)。

查看单个顶点定义:

1/1/1

其形式如下:

[vertex]/[texture]/[normal]

你在这里看到3个由slaks分隔的整数。每个整数指的是索引,其各自的值在OBJ文件中定义。但是,这些指数不是1索引的。对于诸如C的0索引语言,您需要从每个索引中减去1。

因为OpenGL只能渲染真正唯一的顶点(即相同的顶点坐标,纹理坐标和法线),所以生成一个紧凑的索引缓冲区有点棘手,并且需要检查之前看过的顶点。更简单的方法是简单地创建一个从0开始计数的索引缓冲区,并为几何缓冲区中每个面的每个顶点创建一个单独的顶点。