C++DirectX9坐标系与基本图元之索引缓冲区(IndexBuffer)_0303

接下来了解下个知识点,索引缓冲区。

什么是索引缓冲区

索引缓冲区是存储顶点索引的一个存储区域,它的主要作用就是实现顶点数据复用,从而减少重复顶点数据的存储,提高效率。

索引缓冲区跟顶点缓冲区的区别或者作用

索引缓冲区是为了让顶点缓冲区更高效渲染数据服务的。

案例


就以这个八角形为例

简单分析,它有8个三角形,那就是至少有3*8=24个顶点。
但实际上,我们实际需要9个不重复的顶点,其他顶点都可以通过索引的方式描述出来。

顶点数据

//顶点数据
CUSTOMVERTEX g_Vertices[9];
g_Vertices[0].x = 300;
g_Vertices[0].y = 250;
g_Vertices[0].z = 0.5f;
g_Vertices[0].rhw = 1.0f;
g_Vertices[0].color = 0xffff0000;
for (int i = 0; i < 8; i++)
{
    g_Vertices[i + 1].x = (float)(200 * sin(i * 3.14159 / 4.0)) + 300;
    g_Vertices[i + 1].y = -(float)(200 * cos(i * 3.14159 / 4.0)) + 250;
    g_Vertices[i + 1].z = 0.5f;
    g_Vertices[i + 1].rhw = 1.0f;
    g_Vertices[i + 1].color = 0xff00ff00;
}

可以看到顶点数据,从索引0开始,它就是0,0,0点,其他8个点都是通过公式算出来的,这样的话,实际上顶点数据就少了24-9=15个顶点数据。

索引数据

//顶点索引数组
WORD g_Indices[] = { 0,1,2, 0,2,3, 0,3,4, 0,4,5, 0,5,6, 0,6,7, 0,7,8, 0,8,1 };

实际上0,1,2就是一个三角形的三个顶点,不过用索引的方式表达了它们之间的关系.

数据对比

一个顶点20字节,一个索引2字节。
正常情况下,8个三角形应该占用24个顶点那就是20*24=480个字节。
现在采用了索引缓存的方式,一共需要9个顶点+24个索引,9x20+2x24=180+48=228字节,少了一半字节。
所以,采用索引缓存还是很有必要的。

显示效果

总结

每个知识点都是有大作用的,像这个索引缓存就能大大增加渲染效率和数据承载能力。

git仓库

https://github.com/kesshei/direct9Demo/tree/main/03_%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%9D%90%E6%A0%87%E7%B3%BB%E4%B8%8E%E5%9F%BA%E6%9C%AC%E5%9B%BE%E5%85%83/03_IndexBuffer
https://gitee.com/kesshei/direct9Demo/tree/main/03_%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%9D%90%E6%A0%87%E7%B3%BB%E4%B8%8E%E5%9F%BA%E6%9C%AC%E5%9B%BE%E5%85%83/03_IndexBuffer
posted @ 2025-10-20 21:24  蓝创精英团队  阅读(8)  评论(0)    收藏  举报  来源