共通の処理 / 初期化と同じ処理をし、論理フォント情報の作成します。論理フォント情報とは文字の情報です。そして、それをもとにフォントオブジェクトを作成します。
// 論理フォント情報の作成 HFONT hFont = CreateFont( 16, // 高さ。0でデフォルト。 0, // 平均文字幅。0で自動調整。 0, // 文字送りの方向とX軸との角度 0, // 各文字のベースラインとX軸との角度 0, // 太さを0から1000までの値で指定。0でデフォルト。 0, // イタリック体かどうか。TRUEでイタリック体。 0, // 下線付きかどうか。TRUEで下線付き。 0, // 打ち消し線付きかどうか。TRUEで打ち消し線付き。 SHIFTJIS_CHARSET, // 文字セット 0, // 出力精度 0, // クリッピング精度 0, // 出力品質 0, // ピッチとファミリ。 NULL ); // NULLで終わる文字列へのポインタ // フォントオブジェクトの作成 LPD3DXFONT g_lpD3DXFont = NULL; D3DXCreateFont( g_lpD3DDevice, hFont, &g_lpD3DXFont );
テキストの描画を開始するには「ID3DXFont::Begin」を呼び出し、描画が終了したら「ID3DXFont::End」を呼び出します。これらは「IDirect3DDevice9::BeginScene」と「IDirect3DDevice9::EndScene」の間で使用します。描画には「ID3DXFont::DrawText」を使用します。引数の意味は下記の通りです。
// 描画開始 g_lpD3DDevice->BeginScene(); g_lpD3DXFont->Begin(); // テキスト描画 RECT rc={0,0,16*4,16}; g_lpD3DXFont->DrawText( "text", // 文字列へのポインタ -1, // 文字数。-1で自動計算。 &rc, // 描画範囲 DT_NOCLIP, // フォーマット D3DCOLOR_XRGB(255,255,255) ); // 色 // 描画終了 g_lpD3DXFont>End(); g_lpD3DDevice->EndScene();
作成した各オブジェクトを解放します。
// 解放 /* #define RELEASE(p) { if(p){(p)->Release();p=NULL;} } */ RELEASE( g_lpD3DXFont ); RELEASE( g_lpD3DDevice ); RELEASE( g_lpD3D );
ここまでの手順でテキストの描画を行えます。使用例のソースを置いておきます。