D3D9--图元





D3D9--图元

 

 

 

         Direct3D9中有6种图元,就是最基本的图形,再复杂的模型也是以这6种图元构造而成。

 


1.准备工作

 

定义顶点格式和布局,并初始化14个顶点

struct Vertex
{
    D3DXVECTOR3 Position;
    D3DCOLOR Diffuse;
};
 
D3DVERTEXELEMENT9 VertexElements[] =
{
    { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION,0 },
    { 0, 12, D3DDECLTYPE_D3DCOLOR,D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
    D3DDECL_END()
};
 
Vertex Vertices[] =
    {
        D3DXVECTOR3( -0.5, 0.9,0.5 ), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
        D3DXVECTOR3( 0.5, 0.9, 0.5), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
 
        D3DXVECTOR3( -0.5, 0.6,0.5 ), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
        D3DXVECTOR3( 0.5, 0.6, 0.5), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
 
        D3DXVECTOR3( -0.5, 0.3,0.5 ), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
        D3DXVECTOR3( 0.5, 0.3, 0.5), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
 
        D3DXVECTOR3( -0.5, 0.0,0.5 ), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
        D3DXVECTOR3( 0.5, 0.0, 0.5), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
 
        D3DXVECTOR3( -0.5, -0.3,0.5 ), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
        D3DXVECTOR3( 0.5, -0.3,0.5 ), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
 
        D3DXVECTOR3( -0.5, -0.6,0.5 ), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
        D3DXVECTOR3( 0.5, -0.6,0.5 ), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
 
        D3DXVECTOR3( -0.5, -0.9,0.5 ), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
        D3DXVECTOR3( 0.5, -0.9,0.5 ), D3DCOLOR_ARGB( 255, 255, 255, 255 ),
    };




2. D3DPT_POINTLIST 点列表图元


g_pd3dDevice->SetVertexDeclaration(g_pVertexDec);
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( Vertex ) );
g_pd3dDevice->DrawPrimitive( D3DPT_POINTLIST, 0, 14 );


看一下DrawPrimitive,很简单,三个参数,第一个参数指定图元类型,第二个参数从第几个顶点开始绘制,第三个参数绘制多少个图元。这里我们选择点列表图元,从第0个顶点开始绘制,总共绘制14个,这样就把所有顶点都绘制出来。

 




3. D3DPT_LINELIST 线列表图元


g_pd3dDevice->DrawPrimitive(D3DPT_LINELIST, 0, 7 );

从第0个顶点开始,绘制7个线列表图元。

 

 

 

4.D3DPT_LINESTRIP 线带图元


g_pd3dDevice->DrawPrimitive(D3DPT_LINELIST, 0, 13 );

从第0个顶点开始,绘制13个线带图元。和线列表图元的不同点是,上一个图元的最后一个顶点算是下一个图元的第一个顶点,从而把前后两个图元都连接起来

 

 


5. D3DPT_TRIANGLELIST 三角形列表图元

 

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

从第0个顶点开始,绘制4个三角形列表图元,我们总共只有14个顶点,除以3,最多能画4个三角形,但D3D默认做了剔除运算,逆时针构成的三角形会被剔除不显示,所以我们只看到两个三角形,如果我们关闭剔除:

g_pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);

则四个三角形都会绘制出来。这个和线列表类似,上一个图元的点不会给下一个图元用。

 


 

 

 

6. D3DPT_TRIANGLESTRIP 三角形带图元

 

g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 12 );

从第0个顶点开始,绘制12个三角形带图元。上一个图元的点(后俩个点)会给下一个图元用。所以最多能画12个三角形。

 

 

 

 

7. D3DPT_TRIANGLEFAN 三角形扇图元

 

这个适用于绘制圆形等,一个公用的顶点,所有三角形成扇形排布。

 

 

使用“三角形带”和“三角形扇”图元效率比“三角形列表”高,因为减少了点的重复性。比如我们绘制一个矩形,用“三角形列表”就会有两个重复点。

 

 

参考文档

 

http://msdn.microsoft.com/en-us/library/windows/desktop/bb172589(v=vs.85).aspx

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值