我正在学习WebGL从这个网站:http://learningwebgl.com/blog/?p=370什么是webgl中的VertexIndices?
我不明白,什么是VertexIndices,以及为什么金字塔没有他们?
我正在学习WebGL从这个网站:http://learningwebgl.com/blog/?p=370什么是webgl中的VertexIndices?
我不明白,什么是VertexIndices,以及为什么金字塔没有他们?
为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...
]
这样做效率更高,节省内存,并且通常渲染速度也更快。这是多维数据集在教程中使用的方法。
这两种方法都可以正常工作,并且两种方法都有更好的选择,但通常您会看到大多数专业应用程序使用索引几何,因为内存使用率较低。
这是否清除了所有东西?
谢谢兄弟,我明白了。 – 2011-12-17 22:46:06
我认为这是有用的补充说,如果一个顶点在几个三角形之间共享,并且如果每个边没有应用相同的纹理,点必须与其他纹理坐标重复。这在一定程度上降低了索引的兴趣,但仍然可以节省相当多的内存。 – GameAlchemist 2014-03-14 11:53:39