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这里有详细的图片的说明