小谈DrawIndexPrimitive函数

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

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

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

DrawIndexPrimitive(PrimitiveType,              

                                   BaseVertexIndex,

                                   MinIndex,    

                                  NumVertices,     

                                 StartIndex,     

                                PrimitiveCount)

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

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

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

PrimitiveCount:绘制图元的数量

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

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

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

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

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

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

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

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

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

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

小谈DrawIndexPrimitive函数_第1张图片

如这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

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

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

你可能感兴趣的:(小谈DrawIndexPrimitive函数)