几种DrawPrimitive用法

前面的学习,我们知道如何现实一个三角形了,这就意味着我们掌握了如何把我们需要的顶点参数(例如坐标,颜色等等)送入后台缓冲,然后提交前台显示。今天给大家说说对自己的顶点的渲染方式的问题。
大家先一起回顾下上节课的代码片断:


VOID Render()

{
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(10,10,100),1.0f,0);

if(SUCCEEDED(g_pd3dDevice->BeginScene()))

{
    g_pd3dDevice->SetStreamSource(0,g_pVB,0,sizeof(CUSTEMVERTEX));
    g_pd3dDevice->SetFVF(D3DFVF_CUSTEMVERTEX);

    g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);

    g_pd3dDevice->EndScene();

}
    g_pd3dDevice->Present(NULL,NULL,NULL,NULL);

}
这里我们的DrawPrimitive是采用了D3DPT_TRIANGLELIST方式从第0个顶点开始往后渲染了1次。我们就得到了一个三角形。
我们再看看下面的定义:

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, /* force 32-bit size enum */

} D3DPRIMITIVETYPE;
我们共有D3DPT_POINTLIST、D3DPT_LINELIST、D3DPT_LINESTRIP、D3DPT_TRIANGLELIST、D3DPT_TRIANGLESTRIP、D3DPT_TRIANGLEFAN这几种顶点渲染方式,从字面意思就能理解是怎么回事,其具体渲染效果如下图所示


               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);

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

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



//第一个参数是图元类型 
    //点列 D3DPT_POINTLIST 
    //线列 D3DPT_LINELIST(例如:点1和点2连接,点3和点4连接) 
    //线带 D3DPT_LINESTRIP(例如:点1和点2相连,点2和点3相连) 
    //三角形列 D3DPT_TRIANGLELIST(例如:点1、点2和点3构成一个三角形,而点4、点5和点6构成另一个三角形) 
    //三角形带 D3DPT_TRIANGLESTRIP(例如:点1、点2和点3构成一个三角形,点2、点3和点4构成另一个三角形) 
    //三角形扇 D3DPT_TRIANGLEFAN(例如:点1、点2和点3构成一个三角形,而点1、点3和点4构成另一个三角形) 


//注意画三角形的时候,点的顺序一定要是顺时针,否则会画不出来的

posted on 2013-03-18 09:23  KHacker  阅读(502)  评论(0编辑  收藏  举报