繁体   English   中英

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

[英]Struggling With Vertex And Index Buffers In Direct3D

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

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

谢谢。

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

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

四

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

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

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

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

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

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

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

希望这可以帮助。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM