首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

DrawIndexedPrimitive()函数解决思路

2012-12-31 
DrawIndexedPrimitive()函数DrawIndexedPrimitive()函数有几个参数D3DPRIMITIVETYPE Type,INT BaseVertexI

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这里有详细的图片的说明
DrawIndexedPrimitive()函数解决思路

热点排行