-1

我总是觉得这很难理解,因为它看起来很理论化。

glVertex(0.0f,0.0f,0.0f);
glVertex(0.0f,0.0f,-1.0f);
glVertex(-1.0f,0.0f,-1.0f);
glVertex(-1.0f,0.0f,0.0f);

这是openGL中立方体的一个面。

我打开一个 obj 文件,人脸是这样存储的:

f 61 67 52
f 50 66 49

等等等等

4

2 回答 2

4

我在这里猜测,但您似乎对 obj 文件的格式感到困惑。

f 61 67 52实际上非常简单:它指定顶点#61、#67 和#52 在 3D 空间中形成一个三角形(一个面)。

我还要指出,您将四个 OpenGL 即时模式glVertex调用的序列引用为“立方体的一个面”并不是对该代码实际执行或表示的内容的特别好的描述。代码本身指定了四个 3D 顶点,这是唯一指定的信息。面的概念,或就此而言三角形(3D 图形的构建块)的概念与顶点的规范不同。

有几个原因你看不到很多人在 3D 图形中使用几何术语“脸”,它在 .obj 文件中的使用是一个例外。这是因为图形硬件设计用于对三角形进行操作:如果你想制作一个五边形的脸,你真的需要用 3 个或更多的三角形来构建它。我无法告诉你为什么会这样,f 61 67 52而不是t 61 67 52因为那样更有意义。请注意,如果您采用四个不共面的顶点,则无法从中制作出平坦的几何面!这就是为什么可以将三角形称为面的原因:任何 3 个点都是共面的。

于 2013-01-25T19:14:08.907 回答
1
  • 矢量是或可以被认为是一个方向(目标位置坐标 - 您当前的位置坐标会告诉您需要去的方向)和/或只是特定 n 维空间中的坐标列表,例如(1、0、0 ) 在 3-D (x, y, z) 中。
  • 顶点是空间中的一个点,可以用向量(坐标列表 (x, y, z))来描述。
  • 面是一个凸空间,它是通过将至少 3 个顶点一一连接而成的,通常是逆时针方向(这将形成一个三角形)。方向对于了解面部将面向哪一侧很重要。另一面不会被渲染。

网格中的每个面通常都有一个数字,它充当索引和一个法线向量,它显示了这个特定面的渲染侧的方向(简单地从哪里查看可能映射到这个面的纹理)。这一切都取决于如何存储网格的特定格式(obj 只是几种格式中的一种,专有程序通常有自己的封闭格式)。

于 2013-01-25T19:09:04.660 回答