×

[教學][範例] Direct3D Sprite (2D)

Kalet Kalet 发表于2009-03-20 12:00:14 浏览308 评论0

抢沙发发表评论

Spirte 是 Direct3D 專門描繪 2D 圖像的物件。

建立Sprite [教學][範例] Direct3D Sprite (2D)






代碼:
關鍵字:
D3DXCreateSprite
範例碼:
LPD3DXSPRITE pSprite;
D3DXCreateSprite(pDevice,&pSprite);


描繪Sprite






代碼:
關鍵字:
ID3DXSprite::Begin
ID3DXSprite::End
ID3DXSprite::Draw
範例碼:
LPDIRECT3DTEXTURE9 pTexture;
// 載入2D影像
D3DXCreateTextureFromFileEx(pDevice, TEXT("demo.png"), 100, 100, 1, 0,
                            D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT,
                            0, NULL, NULL, &pTexture);

// 描繪
RECT SrcRect = RECT(0, 0, 50, 50);                  // 材質的矩形區域
D3DXVECTOR3 Center = D3DXVECTOR3(0, 0, 0);          // 材質的矩形區域的中心點
D3DXVECTOR3 Position = D3DXVECTOR3(30.0f, 20.0f);   // 描繪的位置
D3DCOLOR Color = D3DCOLOR_ARGB(255, 255, 255, 255); // 色彩遮罩

pSprite->Begin(D3DXSPRITE_ALPHABLEND);
pSprite->Draw(pTexture, &SrcRect, &Center, &Position, Color);
pSprite->End();


旋轉與縮放






代碼:
關鍵字:
D3DXMatrixTransformation2D
ID3DXSprite::SetTransform
範例碼:
pSprite->Begin(D3DXSPRITE_ALPHABLEND);

D3DXVECTOR2 Translation = D3DXVECTOR2(200.0f,50.0f);    // 新的原點
D3DXVECTOR2 RotationCenter = D3DXVECTOR2(50.0f,50.0f);  // 旋轉中心
int Rotation = 45;                                      // 旋轉角度
D3DXVECTOR2 Scaling(1.0f,1.0f);                         // 縮放比例
D3DXMATRIX  Matrix;  // 座標轉換矩陣

D3DXMatrixTransformation2D(&Matrix, NULL, 0.0, &Scaling, &RotationCenter, D3DXToRadian(Rotation), &Translation);
pSprite->SetTransform(&Matrix); [教學][範例] Direct3D Sprite (2D)

RECT SrcRect;
SrcRect.left = 0;
SrcRect.top = 0;
SrcRect.right = SrcRect.left + 100;
SrcRect.bottom = SrcRect.top + 100;

D3DXVECTOR3 Center = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 Position = D3DXVECTOR3(0.0f, 0.0f, 0.0f);

pSprite->Draw(pTexture, &SrcRect, &Center, &Position, D3DCOLOR_ARGB(255,255,255,255));

// 復原 座標轉換設定
Translation = D3DXVECTOR2(0.0f, 0.0f);
RotationCenter = D3DXVECTOR2(0.0f, 0.0f);
Rotation = 0;
Scaling = D3DXVECTOR2(1.0f, 1.0f);

D3DXMatrixTransformation2D(&Matrix, NULL, 0.0, &Scaling, &RotationCenter, D3DXToRadian(Rotation), &Translation);
pSprite->SetTransform(&Matrix);RECT SrcRect = RECT(0, 0, 50, 50);

pSprite->End();


描繪文字






代碼:
關鍵字:
D3DXFONT_DESC
D3DXCreateFontIndirect
LPD3DXFONT
LPD3DXFONT::DrawText
範例碼:
LPD3DXFONT pFont;     // Direct3D Font

// 建立 Direct3D Font
HDC hdc;
D3DXFONT_DESC FontParam;
ZeroMemory(&FontParam, sizeof(FontParam));
hdc = GetDC(0);
FontParam.Height = -MulDiv(9, GetDeviceCaps(hdc, LOGPIXELSY), 72);;
FontParam.CharSet = DEFAULT_CHARSET;
StrCpy(FontParam.FaceName, TEXT("新細明體"));
ReleaseDC(0, hdc);
D3DXCreateFontIndirect(pD3DD, &FontParam, &pFont);

// 描繪
pSprite->Begin(D3DXSPRITE_ALPHABLEND);

D3DCOLOR Color = D3DCOLOR_ARGB(255,255,255,255);
RECT Rect;
Rect.left = 200;
Rect.top = 100;
Rect.right = Rect.left + 300;
Rect.bottom = Rect.top + 50;
         
pFont->DrawText(pSprite, TEXT("Hello World! 您好!"), -1, &Rect, 0, Color); [教學][範例] Direct3D Sprite (2D)

pSprite->End();


群贤毕至

访客