読者です 読者をやめる 読者になる 読者になる

GameProgrammar's Night

ゲームプログラム系の覚え書き

FreeType2でフォントテクスチャ作る際のコツ。ピクセルサイズで作るのと文字送り量の取得

ピクセルサイズ指定で作る

  公式チュートリアルにもある通りFT_Set_Pixel_Sizes関数を使うのですが、フォントによっては指定サイズを超えることがあるようです。指定サイズより少し小さい値を入れることである程度抑制することができます。

// 少し小さい値を入れる
FT_Set_Pixel_Sizes(face,0,nPixelSize-1);

 超えるのはほとんど高さのようなので、フォントテクスチャに書き込む1文字当たりのピクセルサイズを大きくするか多少の欠けを許容するかを選択します。
 自分は欠けを許容してます。サイズの大きいフォントの場合は削れるのはアンチエイリアスの部分、小さいフォントの時は元々小さいので、多少欠けてもそこまで違和感ないかなー、という感じでした。
 字形にもよるのでフォントに合わせて選択する必要があるとは思います。

文字送り量

 文字から文字の間のサイズのことを文字送り量と呼びます。
 文字送り量は、FT_glyphから取得できます。ただし、FreeType2が規定するフォントユニットサイズですのでピクセルサイズに直すには64分の1します。

FT_Face face;
// FT_Render_Glyph後
// 文字送り量(ピクセル)
uint32_t n = face->glyph->metrics.horiAdvance/64;

 この値を保存しておいて、この値だけX座標をずらしながら描画します。

今までのを総合した結果

f:id:katze_7514:20130716234346p:plain

メイリオ、24ピクセル、アンチエイリアスあり指定で描画したスクリーンショット