Lesson 12: 索引缓存
来源:互联网 发布:开放式网络如何加密 编辑:程序博客网 时间:2024/06/03 23:42
原文地址:
http://blog.csdn.net/poem_qianmo/article/details/8304741
单单用顶点缓存来绘制图形的方法在应对复杂图形的时候非常不科学,显得复杂而力不从心。
也就是说,当物体模型很复杂、顶点数量很大时,仅使用顶点缓存绘制图形会使重复的顶点大大增加,并且Direct3D仍需要对这些重复的顶点进行计算,因此需要更多的存储空间和更大的开销。
这时候,我们顶点缓存的红颜知己——索引缓存是时候出场了。
索引缓存(Index Buffers),人如其名,它就是一个索引,用于记录顶点缓存中每一个顶点的索引位置。
索引缓存作为顶点缓存的目录和提纲,能让顶点缓存发挥出内在的潜力,更高效更容易地绘制出一个3D图形来。
另外提一点,索引缓存能够加速显存中快速存取顶点数据位置的能力。
顶点缓存保存了物体模型所有的顶点数据,而这些数据可以是唯一的。索引缓存保存了构成物体的顶点在顶点缓存的索引值,通过索引查找对应的顶点,以完成图形的绘制。
使用顶点缓存配合索引缓存绘制图形,
用到的是IDirect3DDevice9::DrawIndexedPrimitive函数,它的原型如下:
HRESULT DrawIndexedPrimitive( [in] D3DPRIMITIVETYPE Type, [in] INT BaseVertexIndex, [in] UINT MinIndex, [in] UINT NumVertices, [in] UINT StartIndex, [in] UINT PrimitiveCount ); IDirect3DDevice9::DrawIndexedPrimitive函数
第一个参数,D3DPRIMITIVETYPE类型的Type,这个参数和DrawPrimitive方法中第一个参数一摸一样,表示将要绘制的图元类型。
第二个参数,INT类型的BaseVertexIndex,表示将要进行绘制的索引缓存的起始顶点的索引位置。
第三个参数,UINT类型的MinIndex,表示索引数组中最小的索引值,通常都设为0,这样我们的索引就是0,1,2,3,4,5这样往后排的。
第四个参数,UINT类型的NumVertices,表示我们这次调用DrawIndexedPrimitive方法所需要的顶点个数,也就是为多少个顶点做索引,或者说是索引缓存中使用的顶点数目。
第五个参数,UINT类型的StartIndex,表示从索引中的第几个索引处开始绘制我们的图元,或者说是索引缓存区开始读索引值的起始位置。
第六个参数,UINT类型的PrimitiveCount,显然就是要绘制的图元个数了。
用一个图来说明这个函数:
- Lesson 12: 索引缓存
- 索引缓存
- 顶点缓存和索引缓存
- 新概念英语 lesson 12
- Lesson 12 Nehe
- 顶点/索引缓存绘制
- 索引缓存,再一次复习
- Direct3D-索引缓存
- DirectX11 索引缓存
- 索引缓存绘制方形
- 【寒江雪】Direct3DX11索引缓存
- 高效缓存地显示Bitmap图片 [ Lesson 0 - 章节概览 ]
- Lesson 12 this的使用
- Lesson 12 Using block operations
- direct顶点缓存与索引缓存Direct3D
- 菜鸟DirectX之索引缓存
- LDAP索引及缓存优化
- 索引缓存优点和使用
- 通过获取鼠标的点击位置来动态定位元素
- 解题报告:POJ 3162 Walking Race 树型DP+单调RMQ
- 位与字节
- Android ORMLite 多表联查
- TSQL 字符串函数:截断和查找
- Lesson 12: 索引缓存
- jsonp不同的请求方式
- 【java】遍历Map的方法
- C# decimal 类型的数据小数点后的无效0去掉
- Android番外01_ShareSdk分享总结
- 网站外链建设的13种方法,大部分只知道第九种
- CaterUI CRUD Bll语句放在IF里面执行,然后判断bool
- 阿才走了,他曾在北京残酷地活着
- Codeforces Round #384 (Div. 2) C Vladik and fractions