我正在制作一个 OBJ 导入器,我碰巧被困在如何从一组给定的顶点构建网格上。考虑一个具有这些顶点的立方体(OBJ 格式,面是三角形:
v -2.767533 -0.000000 2.927381
v 3.017295 -0.000000 2.927381
v -2.767533 6.311718 2.927381
v 3.017295 6.311718 2.927381
v -2.767533 6.311718 -2.845727
v 3.017295 6.311718 -2.845727
v -2.767533 -0.000000 -2.845727
v 3.017295 -0.000000 -2.845727
我知道如何使用 GLUT 构建网格(调用 GlBegin(GL_TRIANGLES)、glVertex3f(x, y, z)、glEnd() 等)只是我不知道如何将顶点以重新创建对象。我认为它是 v1、v2、v3,然后是 v2、v3、v4 等,直到我制作了足够多的三角形(以及 v7、v8、v1 之类的东西(因为它可以追溯到开头))计数。所以 8 个顶点是立方体的 12 个三角形,比如说,一个有 108 个三角形和 56 个顶点的球体是 (56 个顶点 * 2) - 4。对于一个立方体,我制作了 12 个三角形,没问题,但对于一个球体,我用 56 个顶点制作了 108 个三角形,它不起作用。那么我如何在我的 glVertex 调用中组合顶点以使其适用于任何网格?谢谢!
最佳答案
文件中应该有一堆“face”行(以字母“f”开头的行)告诉您如何将顶点组合成一个对象。例如,
f 1 2 3
表示由文件中的前三个顶点组成的三角形。您可能还会看到类似的内容
f 1/1 2/2 3/3
这是一个包含纹理坐标的三角形,
f 1//1 2//2 3//3
包括顶点法 vector ,或者
f 1/1/1 2/2/2 3/3/3
两者兼而有之。
维基百科有一篇文章包含格式概述:https://en.wikipedia.org/wiki/Wavefront_.obj_file
关于c++ - 如何从一组顶点构建网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20559142/