用DirectX做2D游戏的三种方法

1 DirectDraw

这是早期的做法,由于现在的DirectDraw已经并入到DirectGraphic当中,而且微软也已经在Direct SDk8中把DirectDraw部分的文档取消了,现在多用D3D来做2D的游戏

 

2 ID3DXSprite

这个接口可以很好的制作2D动画,ID3DXSpriteDriectX 9.0里面的一个简单模块,在DriectX 9.0帮助文档里面对其功能的描术为:向用户提供一套简单的在屏幕上实现精灵渲染的接口。何为精灵渲染,说白了就是渲染2D画面,ID3DXSprite帮助用户通过简单的操作就能运用DriectX 9.0制作2D游戏(渲染2D图形)。对于绘制2D图片,其主要步骤就是

(1)     读取图片,载入纹理

(2)     如果需要对图片做旋转或者缩放的话,设置相应的矩阵

(3)     ID3DXSprite::Draw(….)

具体参考代码如下:

//初始化精灵对像

D3DXCreateSprite(g_pDevice, &g_pSprite);

g_pDevice->BeginScene();

    g_pDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL,

                 D3DCOLOR_XRGB(0,0,0),1.0f,0L);

g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);

        

//得到2D坐标转换矩阵

   D3DXMatrixTransformation2D(&mat, NULL, 0.0f, &D3DXVECTOR2(0.1f, 0.1f),

                            &D3DXVECTOR2(50.0f, 50.0f), 0.5f, &D3DXVECTOR2(100.0f, 100.0f));

   g_pSprite->SetTransform(&mat);

        

//渲染精灵

    g_pSprite->Draw(g_ptexSprite, NULL, NULL, NULL, 0x99ffffff);

g_pSprite->End();

g_pDevice->EndScene();

g_pDevice->Present(NULL, NULL, NULL, NULL);

 

另:ID3DXSprite::Draw ()方法9.0C以上版本为5个参数. 9.0B版本为7个参数。

 

3 设置顶点格式为D3DFVF_ XYZRHW

   Direct3D提供了一种坐标格式 D3DFVF_XYZRHW,用于变换后的坐标空间。它有 4 个分量 xyzrhw,其中 xy 使用窗口坐标,zrhw 代表深度。只要把 zrhw 设置成常数(通常 z 0rhw1),就可以用它来定义二维图形的顶点。在使用这种坐标格式绘制二维图形时,建议用顶点颜色或纹理进行渲染,不要使用光照和材质,而且要禁用 Z 缓存,此时后绘制的图形将覆盖在最上面。

下面来演示如何显示一个二维的红色三角形,使用顶点颜色渲染,图元格式选三角形列

//红色三角形的 FVF 格式:RHW 坐标、顶点颜色

  struct CUSTOMVERTEX3

  {

   float x,y,z,rhw;  //顶点坐标

   DWORD color;  //顶点颜色

  };

  #define D3DFVF_CUSTOMVERTEX3 (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)

LPDIRECT3DVERTEXBUFFER9 m_pVB3;//红色三角形的顶点缓存区接口指针

 

  //建立红色三角形

  CUSTOMVERTEX3 vertices3[3] =  //顶点为红色

      {{ 10, 30, 0.0f, 1.0f, D3DCOLOR_XRGB(255,0,0) },  

      { 110, 30, 0.0f, 1.0f, D3DCOLOR_XRGB(255,0,0) },

      { 10, 130, 0.0f, 1.0f, D3DCOLOR_XRGB(255,0,0) }};

 

  //创建红色三角形的顶点缓存区,填入顶点数据(博文长度有限制,此处代码略) 

  .....

 

  //渲染红色三角形

  m_pDevice->SetFVF( D3DFVF_CUSTOMVERTEX3 );

  m_pDevice->SetStreamSource( 0, m_pVB3, 0, sizeof(CUSTOMVERTEX3) );

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

  .....

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值