Struggling With Vertex And Index Buffers In Direct3D

回眸只為那壹抹淺笑 提交于 2019-12-02 22:32:19

IndexBuffers are used for memory & speed optimizations. A indexBuffer is a list of indices that index the vertices in the vertexBuffer.

So say I'm going to render a Flat Quad on the screen with 2 triangles. Each triangle takes up 3 vertices, so to render the quad with just a VertexBuffer I will need 6 vertices.

Now if I use a IndexBuffer though, I would only need to use 4 vertices(one for each corner of the quad). But I would need 6 indices, 3 indices for each triangle, that will index one of the corner vertices.

On large models this can save memory & greatly improve speed as the GPU will be processing fewer vertices.

Here is a site with some good sample code:: http://www.codesampler.com/dx9src.htm In there download the sample called "Indexed Geometry".

This confused me at first too. Another way to think about this is visually (I'm a big visual thinker so maybe this will help you as well).

Expanding on zezba's example, let's say we want to draw a quad using two triangles:

As s/he pointed out, this can be done with just four vertices. So your vertex buffer would contain only FOUR entries. I'll label these {A, B, C, D}:

However, since graphics processors deal with triangles, we still need to define groupings of THREE vertices to tell the GPU how to create triangles out of the list of vertices already defined. This is the purpose of the index buffer.

You can think of the index buffer simply as a list of indices INTO the vertex buffer that defines triangles. So since we are forming two triangles, and each triangle needs three vertices, the index buffer will need SIX entries.

Ordering matters a bit here too. I won't go too much into that but let's just say I want to define my triangles counter clockwise. I'll define my two triangles as {B, A, C} and {B, C, D}. It's perfectly fine to reuse vertices for multiple triangles.

So my buffers end up looking like this:

Hope this helps.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!