Dan*_*Fox 3 javascript webgl html5-canvas
我正在从这个网站学习WebGL:http://learningwebgl.com/blog/?p = 370
我不明白,什么是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..
]
Run Code Online (Sandbox Code Playgroud)
所以现在的问题是我们如何制作三角形呢?最直接的方法就是说每组三个顶点隐含一个三角形(因此上面的数组将定义一个三角形).这很简单,因为它不需要任何额外的信息,你只需要提供三个顶点,硬件完成其余的工作.这称为非索引几何,它是金字塔在您链接的教程中使用的方法.
问题是在大多数模型中,几个三角形都将共享相同的顶点.想想立方体的角落:至少有三个三角形都需要使用同一个点.对于非索引几何,您只需要在数组中复制该顶点的信息三次.这不是非常有效,对于大型复杂网格,您最终会得到大量冗余数据.我们可以通过使用索引几何来解决这个问题.
对于索引几何,您只需在网格中定义一个顶点,然后提供第二个整数数组,这些整数将索引到您的顶点数组中,基本上"连接点"以告诉您的图形卡构成三角形的哪些点.
[
0, 1, 2, // Triangle 0, uses vertices 0, 1, and 2
3, 2, 1, // Triangle 2, uses vertices 3, 2, and 1
// etc...
]
Run Code Online (Sandbox Code Playgroud)
这样效率更高,节省内存并且通常渲染速度也更快.这是多维数据集在教程中使用的方法.
这两种方法都运行得很好,并且两种方法都有更好的选择,但通常您会看到大多数专业应用程序使用索引几何,因为内存使用率较低.
这样清楚了吗?