英吋 DirectX

Direct3D Sprites

最近開始著手雛型版的ARPG
重新弄一個以DXUT為基礎的小引擎
在 DirtecX 裡面負責 2D 圖像處理的DXSprites,就順便整理一下

DXSprites 的介面是 ID3DXSprite
宣告於 d3dx9.h 裡,並且需要連結 d3dx9d.lib or d3dx9.lib ,前者Debug用後者Release用

同樣的,需要向 DX 取得 Sprite 物件,利用 D3DXCreateSprite

HRESULT D3DXCreateSprite(LPDIRECT3DDEVICE9 pDevice, LPD3DXSPRITE *ppSprite);

    pDevice – D3D 設備的指標
    ppSprite – 輸出用的Sprite介面指標

OK~取得之後,就可以進行 Render 的動作了!

和 D3D Device 一樣,Sprite 的繪製動作需要在 Begin & End 之間

HRESULT ID3DXSprite::Begin(DWORD Flags);
HRESULT ID3DXSprite::End( );

Begin 所需要的 flags 請參閱SDK的說明
HRESULT ID3DXSprite::Draw(LPDIRECT3DTEXTURE9 pSrcTexture,
    CONST RECT *pSrcRect,
    D3DXVECTOR3 *center,
    CONST D3DVECTOR3 *pTranslation,
    D3DCOLOR Color );

    pSrcTexture – 將要繪製的 IDirect3DTexture 指標
   
pSrcRect – 繪製該 Texture 的矩形區塊,若是 NULL ,則設為整張圖片
   
center – 繪製的起始點,若是 NULL ,則設為左上角 (0, 0, 0)
    pTranslation – 位移,若是 NULL ,則設為螢幕左上角 (0, 0, 0)
    Color – 輸出的顏色量,ARPG

OK~最陽春的也很夠用的方式就只需要這些了!
一小段範例:

 // 假設已經有了一個D3D設備( pd3dDevice )以及一個紋理( pTex )
 ID3DXSprite * sprite = NULL;

 // 取得Sprite
If ( SUCCEEDED( D3DXCreateSprite( pd3dDevice, &sprite ) )
{
      // created OK
}

 //
 // …
 //
 // 設定要繪製的position ( 10, 50 )
 D3DXVECTOR3 pos( 10.0f, 50.0f, 0.0f );

 // Render
 if( SUCCEEDED( pd3dDevice->BeginScene( ) ) )
 {
      // 只開啟Alpha混合
      pd3dSprite->Begin( D3DXSPRITE_ALPHABLEND );
      // 順便將繪製起點移到 ( 0, 10 )
      pd3dSprite->Draw( pTex, NULL, &D3DXVECTOR3( 0.0f, 10.0f, 0.0f ), &pos, 0xFFFFFFFF)
      pd3dSprite->End( );

      // 關閉場景
      pd3dDevice->EndScene( );
 }

先這樣@_@
晚點再補 SetTransform 的部份~

— End

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.