用DirectX做2D遊戲的三種方法
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圖形)。對於繪製
(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 );
.....