1. 程式人生 > >用DirectX做2D遊戲的三種方法

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

.....