小谈DrawIndexPrimitive函数

本文详细解析了DrawIndexPrimitive函数的工作原理及其参数作用,特别是StartIndex和BaseVertexIndex这两个关键参数如何帮助开发者高效利用顶点缓存和索引缓存,减少内存资源消耗。
摘要由CSDN通过智能技术生成

曾经使用过DrawIndexPrimitive 函数绘制带有索引的多边形

今天突然对里面的参数起了兴趣

于是打开SDK 看看 发现这个函数的功能其实很灵活

DrawIndexPrimitive(PrimitiveType,              

                                   BaseVertexIndex,

                                   MinIndex,    

                                  NumVertices,     

                                 StartIndex,     

                                PrimitiveCount)

 PrimitiveType:绘制的图元类型,可以是点 线 三角形等类型

MinIndex:标识顶点缓存中的索引最小值

NumVertices:顶点缓存中的顶点数量

PrimitiveCount:绘制图元的数量

上面的4个参数都比较好理解 用起来也不难

而剩下的StartIndex 和 BaseVertexIndex则是要重点介绍的了

StartIndex 标识的是索引缓存起始索引位置

BaseVertexIndex 这应该是顶点缓存的一个索引值 标识的是顶点缓存中有效索引的起始值

一般用法就是先写好顶点缓存 再写对应的索引缓存

这样绘制图元的时候就利用索引缓存查找对应的顶点缓存数据

虽然每个图元的数据可能不同

但又可能会用到相同的索引顺序 比如说一个三角形的顺序

那么会在索引缓存中会有重复的索引数据

而利用StartIndex 和 BaseVertexIndex两个参数就能进行灵活的设置

如这2个图 在索引缓存中的0-5段标识了一个图元的索引数据

索引数据中有写好的顶点缓存索引

这些索引数据很明显的是指向顶点缓存中的0-3段

可以直接利用这些索引绘制图元

在顶点缓存中有50-53段的顶点数据将会用到0-3段相同的索引数据

那么就不需要再在索引缓存中再创建新的数据了

利用BaseVertexIndex参数 标识当前有效顶点缓存的起点为50就行了  

DrawIndexPrimitive( D3DPT_TRIANGLELIST, // PrimitiveType

                    0,                  // BaseVertexIndex

                     0,                  // MinIndex   

                  4,                  // NumVertices   

                  3,                  // StartIndex    

                 1 );                // PrimitiveCount

DrawIndexPrimitive( D3DPT_TRIANGLELIST, // PrimitiveType    

                 50,                 // BaseVertexIndex     

                0,                  // MinIndex        

                4,                  // NumVertices      

               3,                  // StartIndex       

              1 );                // PrimitiveCount

仅仅需要改变一个参数值 就能节省索引缓存资源了

越是在绘制大型的多边形图元中 这将节省越多的内存资源

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值