IDirect3DDevice9::DrawPrimitive

功能:从当前输入数据流中渲染一组非索引,指定类型的图元。

HRESULT DrawPrimitive(
    D3DPRIMITIVETYPE PrimitiveType,
    UINT StartVertex,
    UINT PrimitiveCount
    );
第一个参数是一个标记,它通知 Direct3D 绘制哪种类型的物件;
第二个参数是第一个顶点的索引;
第三个参数通知绘制的物件的数目;

Return Values

  如果这个执行成功,返回值是D3D_OK。如果方法失败,返回值可能是D3DERR_INVALIDCALL

Remarks

  当从一个旧的应用程序转换到Direct3D9时,你必须添加一个申明IDirect3DDevice9::SetFVF用于固定管线,或者IDirect3DDevice9::SetVertexDeclaration 用于顶点着色器在你调用Draw之前.

其中 D3DPRIMITIVETYPE 为枚举型,格式
typedef enum D3DPRIMITIVETYPE
{
    D3DPT_POINTLIST = 1,
    D3DPT_LINELIST = 2,
    D3DPT_LINESTRIP = 3,
    D3DPT_TRIANGLELIST = 4,
    D3DPT_TRIANGLESTRIP = 5,
    D3DPT_TRIANGLEFAN = 6,
    D3DPT_FORCE_DWORD = 0x7fffffff,
} D3DPRIMITIVETYPE, *LPD3DPRIMITIVETYPE;

D3DPT_POINTLIST
点列表:将一连串的顶点作为像素进行绘制
D3DPT_LINELIST
线列表:彼此孤立(彼此没有发生连接)的一些直线
D3DPT_LINESTRIP
线带:一连串连接的直线。每条直线都是从前一个顶点到当前顶点绘制而成,很像连接点
D3DPT_TRIANGLELIST
三角形列表:这个设置比较简单,索引区每隔三个一个三角形。
D3DPT_TRIANGLESTRIP
三角形带:索引区中每三个一个三角形,前一个三角形的后两个顶点和后一个三角形的前两个顶点重合。即绘制的第一个三边形使用3个顶点,后面绘制的每一个三角形只使用一个额外的顶点。
D3DPT_TRIANGLEFAN
   三角扇形:索引区中第一个点为公共顶点,后面依次展开,每两个点和公共定点组成三角形。

D3DPT_FORCE_DWORD
这个好像很少用到,好像与什么32位有关,具体啥意思不是很清楚^_^

其具体渲染效果如下图所示


               D3DPT_POINTLIST                          D3DPT_LINELIST

               D3DPT_LINESTRIP                          D3DPT_TRIANGLELIST

            D3DPT_TRIANGLESTRIP                          D3DPT_TRIANGLEFAN

具体实现代码如下:
//从第0个点开始用D3DPT_POINTLIST模式渲染6个点
g_pd3dDevice->DrawPrimitive(D3DPT_POINTLIST,0,6);

//从第0个点开始用D3DPT_LINELIST模式渲染3条线
g_pd3dDevice->DrawPrimitive(D3DPT_LINELIST,0,3);

//从第0个点开始用D3DPT_LINESTRIP模式渲染5条线
g_pd3dDevice->DrawPrimitive(D3DPT_LINELIST,0,5);

//从第0个点开始用D3DPT_TRIANGLELIST模式渲染2个三角形
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2);

//从第0个点开始用D3DPT_TRIANGLESTRIP模式渲染4个三角形
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,4);

当第一个参数是D3DPT_TRIANGLE,渲染三角型图元时,顶点按照顺时针方向排列才能正确渲染

//从第0个点开始用D3DPT_TRIANGLEFAN模式渲染3个三角形
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,3);

所有计算机中复杂的图形都是用这几种点的渲染方式实现的,虽然简单但是很重要。通过这次的内容,我们理论上就能够把我们想显示的任何平面的图像都显示到D3D窗口里了


原文地址:http://apps.hi.baidu.com/share/detail/15040623

                    http://blog.csdn.net/lsmdiao0812/article/details/3166410

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值