我很难弄清楚如何从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
其形式为:
[vertex]/[texture]/[normal]
这里有三个用斜线分隔的整数。每个整数都指索引,OBJ文件中定义了该索引的相应值。然而,并不是说这些指数是1指数。对于C等0索引语言,需要从每个索引中减去1。
因为OpenGL只能渲染真正唯一的顶点(即相同的顶点坐标、纹理坐标和法线),所以生成紧凑的索引缓冲区有点棘手,需要检查您以前见过的顶点。更简单的方法是简单地创建一个从0开始计数的索引缓冲区,并为几何缓冲区中每个面的每个顶点创建一个单独的顶点。