我总觉得这很难理解,因为它似乎都非常理论化。
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
等等
答案 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)
网格中的每个面通常都有一个数字,它充当索引和法线向量,它显示了这个特定面的渲染面的方向(简单地从哪里看看可能被映射的纹理)在这张脸上)。这一切都取决于特定的格式如何存储网格(obj只是几种格式中的一种,专有程序通常有自己的封闭格式)。