在Direct3D中挣扎着顶点和索引缓冲区

Dea*_*tor 9 c++ indexing buffer direct3d vertex

我已经尝试了许多个月,学习如何IDirect3DVertexBuffer9IDirect3DIndexBuffer9工作.我读过多本书,电子书和论坛,但我仍然无法理解他们的工作方式.有人可以帮我理解它们的工作方式以及它们如何连接在一起吗?

PS:我试过搜索相关问题,但没有什么比我感兴趣了.

谢谢.

Mar*_*ood 20

这起初也让我很困惑.考虑到这一点的另一种方式是视觉上(我是一个伟大的视觉思考者,所以这也许会帮助你).

扩展zezba的例子,假设我们想用两个三角形绘制四边形:

四

正如他/她指出的那样,只需要四个顶点即可完成.所以你的顶点缓冲区只包含四个条目.我会标记这些{A,B,C,D}:

带顶点的四边形:A,B,C,D

但是,由于图形处理器处理三角形,我们仍然需要定义三个顶点的分组,以告诉GPU如何从已定义的顶点列表中创建三角形.这是索引缓冲区的目的.

您可以将索引缓冲区简单地视为定义三角形的顶点缓冲区INTO中的索引列表.因为我们正在形成两个三角形,并且每个三角形需要三个顶点,索引缓冲区将需要SIX条目.

订购也很重要.我不会过多考虑,但我只想说我想逆时针定义我的三角形.我将我的两个三角形定义为{B,A,C}{B,C,D}.重复使用多个三角形的顶点是完全正确的.

所以我的缓冲区看起来像这样:

具有顶点和索引缓冲区的Quad

希望这可以帮助.


zez*_*000 7

IndexBuffers用于内存和速度优化.indexBuffer是索引vertexBuffer中顶点的索引列表.

所以说我要在屏幕上用2个三角形渲染一个Flat Quad.每个三角形占据3个顶点,因此要仅使用VertexBuffer渲染四边形,我需要6个顶点.

现在,如果我使用IndexBuffer,我只需要使用4个顶点(四个顶点各一个).但我需要6个索引,每个三角形有3个索引,它们将索引一个角顶点.

在大型模型上,这可以节省内存并大大提高速度,因为GPU将处理更少的顶点.

这是一个包含一些很好的示例代码的站点:: http://www.codesampler.com/dx9src.htm 在那里下载名为"Indexed Geometry"的示例.