前へ 第02章 字を表示する 次へ

ソース 実行ファイル
dx8_02.cpp dx8_02.exe

さて前回はDirectXの初期化が終わりましたけど
画面には何も表示されてません。
これじゃぁなんだか非常に寂しいですね。
今回は画面に字を表示させましょう。
WinAPIではTextOutと言う関数ですぐ表示できました。
しかしDirect3Dではもう少しめんどくさくなります。
その分すごく利点というか高性能な点もあるので我慢しましょう。
その利点とは半透明処理が最初から考慮されている事です。

出てくる関数:
関数名 詳細
HRESULT D3DXCreateFont(
LPDIRECT3DDEVICE8 pDevice,
HFONT hFont,/*フォント オブジェクトへのハンドル*/
LPD3DXFONT* ppFont/*ID3DXFont へのポインタを返す*/
);
デバイスとフォント用のフォント オブジェクトを作成する
INT DrawText(
LPCSTR pString,/*描画する文字列へのポインタ*/
INT Count,/*文字数を指定する*/
LPRECT pRect,/*表示領域を指定する*/
DWORD Format,/*テキストをフォーマットするメソッドを指定する*/
D3DCOLOR Color/*テキストの色を指定する(D3DCOLOR型)*/
);
Direct3Dデバイス上に、整形した ANSI テキストを描画する
それではソースを追っていきましょう。 *前回と同じ部分は省略しています。 LPD3DXFONT _3dFont; HFONT _hFont; この二つはフォントを使う為の構造体です。 一つ目がDirect3Dのフォントを作成して保存する構造体です 二つ目はAPIを用いて作ったフォントを保存する為の構造体です。 まずAPIでフォントを作成してそのフォントからDirect3Dのフォントを作成します。 _hFont = CreateFont( 20,10, 0, 0, FW_BOLD , FALSE, FALSE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH , "MS ゴシック"); これはWinAPI関数です。まずこれでフォントを作ります。 引数の詳しい指定方はAPIのHelpを見てください。 D3DXCreateFont( g_pd3dDevice, _hFont, &_3dFont ); そしてDirect3D用のフォントに変換します。 そしていよいよ描画です。 RECT構造体に何やら座標を格納させていますね。 これは表示位置&表示領域を指定しています。 _3dFont->Begin(); ここからテキスト描画を始めれます。 Begin()をせずにDrawText()をすれば 暗黙的にBegin()・End()が呼ばれます。 _3dFont->DrawText( "表示させたいテキスト", -1, &trect, DT_LEFT, D3DCOLOR_ARGB( 0xFF, alpha+=1, 0x00, 0x00 )); ここでテキストを描画しています。 D3DCOLOR_ARGBの引数は(アルファ値,赤,緑,青)となっていますのでアルファ値の値により 半透明なテキストが簡単に再現可能です。 _3dFont->End(); ここでテキスト描画は終わりです。 開放処理部に_3dFontの開放を入れましょう。 RELEASE(_3dFont); サンプルではマクロを使って開放しています。 この方法は手軽ですけど実は凄く遅いです。 一気にパフォーマンスが落ちるので実用には耐えれないかと思います。 後日別方法での表示も掲載する予定です。