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