2011-12-17 81 views

回答

9

为3D对象定义几何图形时,有两个基本元素正在使用:顶点和三角形。顶点只是由XYZ坐标定义的空间位置(通常是一些附加信息,如纹理坐标),三角形只是三个顶点。

定义顶点非常简单。你通常只是提供一个位置列表,如下所示:

[ 
    1.0, 2.0, 3.0, // vertex 0 
    4.0, 5.0, 6.0, // vertex 1 
    7.0, 8.0, 9.0, // vertex 2 
    // etc.. 
] 

所以现在的问题是我们该如何制作三角形呢?最直接的方式就是说每个三个顶点集合都隐含一个三角形(所以上面的数组将定义一个三角形)。这很容易,因为它不需要任何附加信息,只需提供三个顶点,剩下的就是硬件。这被称为非索引几何,这是金字塔在您链接的教程中使用的方法。

问题是,在大多数模型中,几个三角形都将共享相同的顶点。想想立方体的角落:至少有三个三角形都需要使用同一个点。使用非索引几何时,您需要将阵列中该顶点的信息复制三次。这不是非常有效,对于大型复杂网格,最终会产生大量冗余数据。我们可以通过使用索引几何来解决这个问题。

带索引的几何图形只需定义一次网格中的每个顶点,然后提供第二个整数索引,它将索引到您的顶点数组中,并基本上“连接点”以告诉您的图形卡组成三角形的哪些点。

[ 
    0, 1, 2, // Triangle 0, uses vertices 0, 1, and 2 
    3, 2, 1, // Triangle 2, uses vertices 3, 2, and 1 
    // etc... 
] 

这样做效率更高,节省内存,并且通常渲染速度也更快。这是多维数据集在教程中使用的方法。

这两种方法都可以正常工作,并且两种方法都有更好的选择,但通常您会看到大多数专业应用程序使用索引几何,因为内存使用率较低。

这是否清除了所有东西?

+0

谢谢兄弟,我明白了。 – 2011-12-17 22:46:06

+0

我认为这是有用的补充说,如果一个顶点在几个三角形之间共享,并且如果每个边没有应用相同的纹理,点必须与其他纹理坐标重复。这在一定程度上降低了索引的兴趣,但仍然可以节省相当多的内存。 – GameAlchemist 2014-03-14 11:53:39