矢量,顶点和面部之间的差异?

时间:2013-01-25 19:00:46

标签: c++ winapi math opengl

我总觉得这很难理解,因为它似乎都非常理论化。

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

等等

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

  • 向量是或可以被认为是方向(目标位置 坐标 - 您当前的位置坐标会告诉您 你需要去的方向)和/或只是一个坐标列表 特定的n维空间,例如3-D(x,y,z)中的(1,0,0)。
  • 顶点是空间中的一个点,可以用Vector(a 坐标列表(x,y,z))。
  • 面是凸起的空间,通过连接至少3个来制作 顶点一个接一个,通常逆时针(这会产生一个 三角形)。方向很重要,了解脸的哪一面 将面临。其他方面不会被渲染。

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