IndexBuffer顾名思义就是保存索引编号的缓冲区。
举例说如有以下几个顶点数据保存在VertexBuffer中:
v1, v2, v3, v4, v5
而你想用第0,1,4顶点画一个三角形,如果不用IndexBuffer你不得不从新排列一下VertexBuffer:v1, v2, v5...才能保证渲染正确。
如果不想动VertexBuffer,你就要使用IndexBuffer,你创建一个IndexBuffer,填充以下数据:
0, 1, 4
这样在VertexBuffer和IndexBuffer共同作用下,你就可以画出你想要得三角形了。
除了避免修改VB,使用IndexBuffer另一个重要的好处是:可以复用转换后的顶点(Transformed Vertex,就是3d坐标的转换等)。
如IndexBuffer内容如下(假设使用Triangle List方式来画):
0,1, 4, 2,4, 5
定义了两个三角形:(0, 1, 4) 和 (2, 4, 5)
索引4的这个顶点被连续用到两次,对于支持Vertex Cache的图形硬件(已经广泛支持了),画第二个三角形时GPU“知道”用第一个三角形索引4顶点转换后的结果,这样索引4顶点虽然被用到两次,但只Transform一次。
Vertex Cache数量是有限的,所以IndexBuffer中的数据尽量做到Local Reference(指把多次用到的数据放在相互靠近的地方)。
浙公网安备 33010602011771号