電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

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

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫
上一篇主題 :: 下一篇主題  
發表人 內容
npcgamer
時常出沒的會員


註冊時間: 2007-11-02
文章: 47

3.00 果凍幣

發表發表於: 2008-2-17, PM 4:08 星期日    文章主題: [教學][範例] Direct3D Sprite (2D) 引言回覆

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

建立Sprite
代碼:
關鍵字:
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);

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

pSprite->End();
回頂端
檢視會員個人資料 發送私人訊息
Okerofujin
略有貢獻的成員


註冊時間: 2007-10-19
文章: 71

-40.53 果凍幣

發表發表於: 2008-12-28, AM 3:47 星期日    文章主題: 引言回覆

問題

Okerofujin 在 2018-7-5, PM 11:55 星期四 作了第 1 次修改
回頂端
檢視會員個人資料 發送私人訊息
babu61509
散播福音的祭司


註冊時間: 2007-08-26
文章: 142

681.01 果凍幣

發表發表於: 2008-12-30, AM 9:35 星期二    文章主題: 引言回覆

HPkon 寫到:
請問一下!!!
有2D貼圖的程式範例嗎???

http://www.gamelife.idv.tw/viewtopic.php?p=1453#1453
炸彈超人第七版就是啦~ v~

_________________
已經畢業了!!
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作