Struggling With Vertex And Index Buffers In Direct3D

后端 未结 2 751
耶瑟儿~
耶瑟儿~ 2021-02-03 11:59

I\'ve tried for many months to learn how IDirect3DVertexBuffer9 and IDirect3DIndexBuffer9 work. I\'ve read multiple books, e-books and forums and I sti

2条回答
  •  自闭症患者
    2021-02-03 12:44

    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:

    Quad

    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}:

    Quad with vertices: 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:

    Quad with vertex and index buffers

    Hope this helps.

提交回复
热议问题