DrawIndexedPrimitive()函数,该怎么处理

DrawIndexedPrimitive()函数

DrawIndexedPrimitive()函数有几个参数

  D3DPRIMITIVETYPE Type,
  INT BaseVertexIndex,
  UINT MinIndex,
  UINT NumVertices,
  UINT StartIndex,
  UINT PrimitiveCount

请问这三个参数是什么意思(BaseVertexIndex,MinIndex,StartIndex)

------解决方案--------------------
BaseVertexIndex,是第一个点到vertexbuffer的开始的offset。比如你的vertexbuffer可能是好几个物体组成的,那么你想画某个物体可以指定BaseVertexIndex,这时候indexbuffer里的0指的是BaseVertexIndex的地方,而不是vertexbuffer的开始的地方。
MinIndex,这次用的最小的vertex index,是从BaseVertexIndex开始算得,所以第一个可以绘制的顶点是BaseVertexIndex+MinIndex。
StartIndex是index buffer的起点。
------解决方案--------------------
HRESULT DrawIndexedPrimitive
(
D3DPRIMITIVETYPE Type, 
INT BaseVertexIndex, 
UINT MinIndex, 
UINT NumVertices, 
UINT StartIndex, 
UINT PrimitiveCount 
);

讲讲这个函数的用法:
参数Type:采用什么方式绘制。假如有六个顶点1,2,3,4,5,6
D3DPT_POINTLIST 画点 
D3DPT_LINELIST 画线:12,34,56
D3DPT_LINESTRIP 画线:12,23,34,45,56
D3DPT_TRIANGLELIST ,三角形:顶点必须是3的倍数。123,345。 
D3DPT_TRIANGLESTRIP ,三角形:123,234,345,456
D3DPT_TRIANGLEFAN ,三角扇形:123,134,145,156等
参数BaseVertexIndex:这个参数与索引缓冲区中的索引相加之后得到的值才是顶点缓冲区 中的真实位置。有了这个参数,我们可以用一个索引缓冲区去渲染放 在同一个顶点缓冲区中的多个Mesh。当然,这几个Mesh的顶点绘制顺 序必须一致。
参数MinIndex:索引缓冲区中最小的索引号
参数NumVertices:渲染过程需要处理的顶点数。
参数StartIndex:索引缓冲区中从那个索引开始渲染顶点。
参数PrimitiveCount :渲染图元的个数。
注意上面假设的6个顶点,指的是索引缓冲区的顶点.就是说真正的顶点缓冲区中可能没有6个顶点.因为有些三角形可以共用顶点.

图元的计算方式:
D3DPT_POINTLIST n 
D3DPT_LINELIST n/2 
D3DPT_LINESTRIP n-1 
D3DPT_TRIANGLELIST n/3 
D3DPT_TRIANGLESTRIP n-2 
D3DPT_TRIANGLEFAN n-2 
上表中n是顶点缓冲区中的顶点个数。

摘自http://blog.xoyo.com/xiayong/article/116039.shtml
------解决方案--------------------
看个实际例子就知道了啊

分别应该是:
从开始index画起,一次用多少个index
最小index
顶点个数
开始index
画多少个图元,比如,要画多少个三角形等等

------解决方案--------------------
vertex buffer = |v0|v1|v2|v3|v4|v5|v6|v7|v8|
index buffer = 0,2,1,1,2,3

那么假如你要画的三角形是5,6,7三个点组成的,那么
BaseVertexIndex = 4 表示索引的0对应的是v4
minIndex=1, 表示索引的最小值是1
NumVertices = 3 表示有3个点
StartIndex = 3 表示绘制从索引buffer的第3个元素开始
PrimitiveCount = 1

------解决方案--------------------
http://hi.baidu.com/sxligang/blog/item/4b98e3caabbcc282c8176864.html这里有详细的图片的说明