http://blog.sina.com.cn/s/blog_607adeb50100ee18.html
1 用DirectDraw
这是早期的做法,由于现在的DirectDraw已经并入到DirectGraphic当中,而且微软也已经在Direct SDk8中把DirectDraw部分的文档取消了,现在多用D3D来做2D的游戏
2 用ID3DXSprite
这个接口可以很好的制作2D动画,ID3DXSprite是DriectX 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 个分量 x、y、z、rhw,其中 x、y 使用窗口坐标,z、rhw 代表深度。只要把 z、rhw 设置成常数(通常 z 取 0,rhw取1),就可以用它来定义二维图形的顶点。在使用这种坐标格式绘制二维图形时,建议用顶点颜色或纹理进行渲染,不要使用光照和材质,而且要禁用 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 );
.....