IndexBuffer顾名思义就是保存索引编号的缓冲区。  

举例说如有以下几个顶点数据保存在VertexBuffer:  

  v1,   v2,   v3,   v4,   v5  

  而你想用第0,1,4顶点画一个三角形,如果不用IndexBuffer你不得不从新排列一下VertexBufferv1,   v2,   v5...才能保证渲染正确。  

  如果不想动VertexBuffer,你就要使用IndexBuffer,你创建一个IndexBuffer,填充以下数据:  

  0,   1,   4  

这样在VertexBufferIndexBuffer共同作用下,你就可以画出你想要得三角形了。  

   

除了避免修改VB,使用IndexBuffer另一个重要的好处是:可以复用转换后的顶点(Transformed   Vertex,就是3d坐标的转换等)  

  IndexBuffer内容如下(假设使用Triangle   List方式来画):  

  0,1,   4,   24,   5  

  定义了两个三角形:(0,   1,   4)     2   4   5  

  索引4的这个顶点被连续用到两次,对于支持Vertex   Cache的图形硬件(已经广泛支持了),画第二个三角形时GPU“知道”用第一个三角形索引4顶点转换后的结果,这样索引4顶点虽然被用到两次,但只Transform一次。  

  Vertex   Cache数量是有限的,所以IndexBuffer中的数据尽量做到Local   Reference(指把多次用到的数据放在相互靠近的地方)。