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

Opengl 如何从.obj面派生索引缓冲区?,opengl,graphics,directx,wavefront,Opengl,Graphics,Directx,Wavefront,我正在努力找出如何从波阵面对象文件创建索引缓冲区。我知道面可能由任意数量的顶点组成,例如: f 1 2 3 4 f 2 3 4 5 我如何识别用这些构造三角形的正确方法 如果查看OBJ文件,面定义如下所示: f 1//1 2//2 3//3 以f(ace)指示符开头的每一行定义一个基元。在本例中,有3个部分以空格分隔。每个部分定义一个顶点。如果每个面有3个这样的截面,则知道该面必须是三角形。如果是4,则面为四边形(尽管这种格式在当今相对不常见) 查看单个顶点定义: 1/1/1 其形式如下:

我正在努力找出如何从波阵面对象文件创建索引缓冲区。我知道面可能由任意数量的顶点组成,例如:

f 1 2 3 4
f 2 3 4 5

我如何识别用这些构造三角形的正确方法

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

f 1//1 2//2 3//3
以f(ace)指示符开头的每一行定义一个基元。在本例中,有3个部分以空格分隔。每个部分定义一个顶点。如果每个面有3个这样的截面,则知道该面必须是三角形。如果是4,则面为四边形(尽管这种格式在当今相对不常见)

查看单个顶点定义:

1/1/1
其形式如下:

[vertex]/[texture]/[normal]
在这里你可以看到3个整数,用sleas分隔。每个整数都是指在OBJ文件中定义了相应值的索引。然而,这些指数不是1-指数。对于索引为0的语言(如C),需要从每个索引中减去1

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