曾经使用过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
仅仅需要改变一个参数值 就能节省索引缓存资源了
越是在绘制大型的多边形图元中 这将节省越多的内存资源