Text là một phần quan trọng trong game. Dùng để hiển thị các thông tin cần thiết như số lính hạ gục, lượng đạn còn lại, hay hiển thị FPS của game,… Để vẽ text thì D3DX cung cấp ID3D10XFont.

Để có được con trỏ ID3D10Font thì việc đầu tiên là chúng ta phải có một cấu trúc D3DX10_FONT_DESC mô tả các đặt tính của text mà ta muốn vẽ. Sau đó ta dùng hàm D3DX10CreateFontIndirect(). Hàm này sẽ trả về một con trỏ đến Id3DX10Font thông qua tham số của nó.


D3DX10_FONT_DESC fontDesc;
fontDesc.Height = 24;
fontDesc.Width = 0;
fontDesc.Weight = 0;
fontDesc.MipLevels = 1;
fontDesc.Italic = false;
fontDesc.CharSet = DEFAULT_CHARSET;
fontDesc.OutputPrecision = OUT_DEFAULT_PRECIS;
fontDesc.Quality = DEFAULT_QUALITY;
fontDesc.PitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
wcscpy(fontDesc.FaceName, L"Times New Roman");

ID3DX10Font* mFont;
D3DX10CreateFontIndirect(md3dDevice, &fontDesc, &mFont);

Tham số đầu tiên của hàm này là một con trỏ đến ID3D10Device , tham số thử 2 là là một con trỏ đến D3DX10_FONT_DESC mà chúng ta vừa tạo. tham số thừ 3 là một con trỏ cấp 2 đến ID3DX10Font.

Trong ID3DX10Font thì hàm chính mà ta sẽ dùng là ID3DX10Font::DrawText(). Thông tin chi tiết hàm này như sau:


INT ID3DX10Font::DrawText(
LPD3DX10SPRITE pSprite,
LPCTSTR pString,
INT Count,
LPRECT pRect,
UINT Format,
D3DXCOLOR Color
);

  • pSprite: Một con trỏ đến ID3D10XSprite, nó có thể là NULL, nhưng nếu bạn vẽ nhiều text trong một frame thì sẽ hiệu quả hơn trong việc tạo sprite của riêng bạn. xem SDK để biết thêm chi tiết. Vì chúng ta chỉ gọi  ID3DX10Font::DrawText() một làn mỗi frame nên chúng ta sẽ để nó NULL cho ví dụ mẫu của chúng ta.
  • pString: Con trỏ dến string muốn vẽ.
  • Count: số lượng ký tự muốn vẽ. -1 cho ký tự ‘\0’
  • pRect: Một con trỏ đến RECT liên quan đến client area của window. định ngĩa khu vực để vẽ text và định dạng.
  • Format: Tùy chọn text sẽ được format như thế nào trong pRect trong ví dụ bên dưới ta sẽ dùng DT_NOCLIP có ngĩa là text sẽ không bị cắt nếu nó ra ngoài pRect. Một vài tham số khác như DT_CENTER,DT_VCENTER – hai tham số này căn lên của text theo chiều dọc và theo chiều ngang so với hình chứ nhật được định ngĩa bởi pRect.
  • Color: Màu sắc của text. Như chúng ta đã nói ở phần trước thì màu sắc được chứa trong lớp  D3DXCOLOR – bao gôm 4 biến số thực đại diện cho 4 giá trị red, blue, green, alpha.

Dưới đây là ví  dụ về gọi hàm này:


// We specify DT_NOCLIP, so we do not care about width/height of the rect.
const D3DXCOLOR BLACK(0.0f, 0.0f, 0.0f, 1.0f);
RECT R = {5, 5, 0, 0};
mFont->DrawText(0, L"Hello, Direct3D!", -1, &R, DT_NOCLIP, BLACK);