如何从 .obj 面派生索引缓冲区?
How to derive index buffer from .obj faces?
我正在努力弄清楚如何从 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]
你在这里看到了 3 个由斜线分隔的整数。每个整数指的是 index,其各自的值在 OBJ 文件中定义。但是,并不是说这些索引是 1 索引的。对于 C 等 0 索引语言,您需要从每个索引中减去 1。
因为 OpenGL 只能渲染真正唯一的顶点(即,相同的顶点坐标、纹理坐标和法线),生成紧凑的索引缓冲区有点棘手,需要检查您之前见过哪些顶点。更简单的方法是简单地创建一个从 0 开始计数的索引缓冲区,并为几何缓冲区中每个面的每个顶点创建一个单独的顶点。
我正在努力弄清楚如何从 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]
你在这里看到了 3 个由斜线分隔的整数。每个整数指的是 index,其各自的值在 OBJ 文件中定义。但是,并不是说这些索引是 1 索引的。对于 C 等 0 索引语言,您需要从每个索引中减去 1。
因为 OpenGL 只能渲染真正唯一的顶点(即,相同的顶点坐标、纹理坐标和法线),生成紧凑的索引缓冲区有点棘手,需要检查您之前见过哪些顶点。更简单的方法是简单地创建一个从 0 开始计数的索引缓冲区,并为几何缓冲区中每个面的每个顶点创建一个单独的顶点。