c++ - 如何从一组顶点构建网格

标签 c++ glut mesh vertices

我正在制作一个 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/

相关文章:

java - 通过插值在重心坐标处获得适当的 UV

C++ 从文件中读取整数和字符串

c++ - 琐碎与标准布局与 POD

c++ - GLUT 键盘事件

c++ - 无法在窗口中正确 reshape 多边形

c++ - Maya API - 从 Material 中获取网格

c# - 绘制带网格的实心框

c++ - DebugView 打印列显示 "????"

c++ - 跨平台处理文件路径

c++ - glBufferData() 的段错误