2011-02-03 80 views
9

我已经尝试了很多个月,学习IDirect3DVertexBuffer9IDirect3DIndexBuffer9如何工作。我已经阅读过多本书,电子书和论坛,但仍然无法掌握它们的工作方式。有人能帮助我理解他们如何工作以及他们如何链接在一起? PS:我试过搜索相关的问题,但没有任何关注我的东西。在Direct3D中与顶点和索引缓冲区挣扎

谢谢。

回答

7

IndexBuffers用于存储器&速度优化。 indexBuffer是索引vertexBuffer中顶点的索引列表。

所以说我要用2个三角形在屏幕上渲染一个平面四边形。每个三角形占用3个顶点,所以要使用VertexBuffer渲染四边形,我需要6个顶点。

现在,如果我使用IndexBuffer,我只需要使用4个顶点(每个角的四个顶点)。但是我需要6个索引,每个三角形有3个索引,这将索引角点顶点之一。

对于大型模型,这可以节省内存&大大提高速度,因为GPU将处理更少的顶点。

这是一个网站,有一些很好的示例代码:: http://www.codesampler.com/dx9src.htm 在那里下载称为“索引几何”的样本。

+0

谢谢zezba9000。正是我需要知道的。再次感谢。 – DeadCapacitor 2011-02-03 17:29:40

20

这让我很困惑。另一种思考方式是视觉上(我是一个大视觉思想家,所以也许这也会对你有帮助)。

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

Quad

当她/他指出,这可以只用四个顶点完成。所以你的顶点缓冲区将只包含四个条目。我会标注这些{A,B,C,d}:

Quad with vertices: A, B, C, D

然而,由于图形处理器处理的三角形,我们仍然需要定义的三个顶点分组告诉GPU如何创建三角形在已经定义的顶点列表之外。这是索引缓冲区的目的。

您可以将索引缓冲区简单地看作是指向定义三角形的顶点缓冲区的索引列表。因此,由于我们正在形成两个三角形,并且每个三角形需要三个顶点,因此索引缓冲区将需要SIX条目。

订购在这里也很重要。我不会去太多,但我们只是说我想定义我的三角形逆时针。我将定义我的两个三角形为{B,A,C}{B,C,D}。重复使用多个三角形的顶点是完美的。

所以我最终缓冲区这样看:

Quad with vertex and index buffers

希望这有助于。

+0

这确实有很大的帮助。谢谢,Haylwood。是的,我也是一个视觉思想家:) – DeadCapacitor 2011-02-11 23:11:13