Mar*_*ood 20
这起初也让我很困惑.考虑到这一点的另一种方式是视觉上(我是一个伟大的视觉思考者,所以这也许会帮助你).
扩展zezba的例子,假设我们想用两个三角形绘制四边形:
正如他/她指出的那样,只需要四个顶点即可完成.所以你的顶点缓冲区只包含四个条目.我会标记这些{A,B,C,D}:
但是,由于图形处理器处理三角形,我们仍然需要定义三个顶点的分组,以告诉GPU如何从已定义的顶点列表中创建三角形.这是索引缓冲区的目的.
您可以将索引缓冲区简单地视为定义三角形的顶点缓冲区INTO中的索引列表.因为我们正在形成两个三角形,并且每个三角形需要三个顶点,索引缓冲区将需要SIX条目.
订购也很重要.我不会过多考虑,但我只想说我想逆时针定义我的三角形.我将我的两个三角形定义为{B,A,C}和{B,C,D}.重复使用多个三角形的顶点是完全正确的.
所以我的缓冲区看起来像这样:
希望这可以帮助.
IndexBuffers用于内存和速度优化.indexBuffer是索引vertexBuffer中顶点的索引列表.
所以说我要在屏幕上用2个三角形渲染一个Flat Quad.每个三角形占据3个顶点,因此要仅使用VertexBuffer渲染四边形,我需要6个顶点.
现在,如果我使用IndexBuffer,我只需要使用4个顶点(四个顶点各一个).但我需要6个索引,每个三角形有3个索引,它们将索引一个角顶点.
在大型模型上,这可以节省内存并大大提高速度,因为GPU将处理更少的顶点.
这是一个包含一些很好的示例代码的站点:: http://www.codesampler.com/dx9src.htm 在那里下载名为"Indexed Geometry"的示例.