我已经尝试了好几个月来了解IDirect3DVertexBuffer9
和IDirect3DIndexBuffer9
的工作原理。我读过多本书,电子书和论坛,但我仍然无法理解他们的工作方式。有人可以帮我理解它们的工作方式以及它们如何联系在一起吗?
PS:我试过搜索相关问题,但没有任何让我感兴趣的事。
感谢。
答案 0 :(得分:20)
这也让我很困惑。考虑到这一点的另一种方式是视觉上的(我是一个伟大的视觉思考者,所以也许这对你也有帮助。)
扩展zezba的例子,假设我们想用两个三角形绘制四边形:
正如他/他指出的那样,只需要四个顶点即可完成。所以你的顶点缓冲区只包含四个条目。我会标记这些{A,B,C,D}:
然而,由于图形处理器处理三角形,我们仍然需要定义三个顶点的分组,以告诉GPU如何从已定义的顶点列表中创建三角形。这是索引缓冲区的目的。
您可以将索引缓冲区简单地视为定义三角形的顶点缓冲区中的索引列表。因此,由于我们正在形成两个三角形,并且每个三角形需要三个顶点,索引缓冲区将需要SIX条目。
在这里订购也很重要。我不会过多考虑,但我只想说我要定义我的三角形逆时针。我将我的两个三角形定义为 {B,A,C} 和 {B,C,D} 。重复使用多个三角形的顶点是完全正确的。
所以我的缓冲区看起来像这样:
希望这有帮助。
答案 1 :(得分:7)
IndexBuffers用于内存&速度优化。 indexBuffer是索引vertexBuffer中顶点的索引列表。
所以说我要在屏幕上用2个三角形渲染一个Flat Quad。每个三角形占据3个顶点,因此要仅使用VertexBuffer渲染四边形,我需要6个顶点。
现在如果我使用IndexBuffer,我只需要使用4个顶点(四个顶点各一个)。但我需要6个索引,每个三角形有3个索引,它们将索引一个角顶点。
在大型机型上,这可以节省内存和大大提高速度,因为GPU将处理更少的顶点。
这是一个包含一些优秀示例代码的网站:: http://www.codesampler.com/dx9src.htm 在那里下载名为“索引几何”的样本。