DrawIndexedPrimitive参数详解

简介: HRESULT DrawIndexedPrimitive( [in]  D3DPRIMITIVETYPE Type, [in]  INT BaseVertexIndex, [in]  UINT MinIndex, [in]  UINT NumVertices, [in]  UINT StartIndex, [in]  UINT PrimitiveCount ); MinIndex:这个是相对于VertexBuffer而言,它是指绘画中用到的VertexBuffer的最小索引,感觉他只是提示IndexBuffer数组里最小的Index是值。
HRESULT DrawIndexedPrimitive(
  [in]  D3DPRIMITIVETYPE Type,
  [in]  INT BaseVertexIndex,
  [in]  UINT MinIndex,
  [in]  UINT NumVertices,
  [in]  UINT StartIndex,
  [in]  UINT PrimitiveCount
);
MinIndex:这个是相对于VertexBuffer而言,它是指绘画中用到的VertexBuffer的最小索引,感觉他只是提示IndexBuffer数组里最小的Index是值。网上的有一种扯蛋的说法误导了我很久。实际上我觉得这个参数一点用都没有,这个参数可以通过StartIndex和PrimitiveCount遍历IndexBuffer算出来。而且实际中我测试这个参数好像也是没有任何用处的,某种意义上,他可以为导出顶点的起始索引减法有帮助。
 
NumVertices:它不是实际画的顶点数目,而是使用到的VertexBuffer区域大小,比如要画一个三角形,有可能NumVertices=4,说明中间有一个顶点没有用到如下图所示:

 
MinIndex和NumVertices决定了本次绘画时,用到的VertexBuffer 顶点区间。
StartIndex:它是对于IndexBuffer而言的,IndexBuffer使用的开始位置。
BaseVertexIndex:他的影响是每一个vb Indexbuffer的值都要加上这一个数值见见图1,,顶点缓存的第一个顶点索引的偏移位置,偏移是因为当多个顶点缓存合并成一块全局缓存中时每块都有一个基准的offset值,例如合并多个顶点缓存减少渲染batch数,提高性能,但是较少使用。

 



决定VertexBuffer在绘图中使用到的顶点区间:
起始:
1.SetStreamSource 中的Offset
2.如果BaseVertexIndex不为0,则代表,IndexBuffer每一个值都要加上这个值。所以BaseVertexIndex+Offset就可以被认为是VertexBuffer的起始位置。
3.如果MinIndex不为0,有两种可能,未经BaseVertexIndex转化的话,MinIndex是50,这样在VertexBuffer的时候不可以加上这个MinIndex,这样起始位置就是Offset+BaseVertexIndex+(MinIndex-BaseVertexIndex)。如果经过BaseVertexIndex转化之后的话,Minindex是0,则起始位置就是Offset+BaseVertexIndex+MinIndex。
大小:
不知道MinIndex对NumVertice的影响在实际中要查看一下。

关于IndexBuffer区间:
起始:直接为startIndex
大小:目前只可以通过按prim计算。
相关文章
|
Unix Shell 图形学
|
内存技术 Linux
U_boot 的 bootcmd 和bootargs参数详解
U-boot的环境变量值得注意的有两个:bootcmd 和bootargs   u-bootcmd    前面有说过bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数.
2138 0
|
缓存 监控 关系型数据库
|
缓存 测试技术 Windows
|
网络协议 网络安全 Apache
|
算法 Shell 数据安全/隐私保护