OpenGLで文字の描画

OSや環境に依存しない方法を考えるとなかなか厄介な問題。

1.ビットマップで描画する

最も一般的に使われてる手法?文字を並べた画像をあらかじめ作成しておき、その画像をテクスチャとしてそれぞれの文字に応じて振り分けて表示する。

弱点はビットマップなので拡大すると荒くなることと、文字数の多い日本語などを扱おうとすると馬鹿でかいテクスチャが必要になる。

ちなみに透視投影の3D画面でテキストを表示する場合は

glMatrixMode(GL_PROJECTION); //透視変換モードに
glPushMatrix();
glLoadIdentity();
glOrtho(0,640,480,0,-1,1); //平行投影にする
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

////////////////////////////////////
// ここにテキスト描画コードを書く
////////////////////////////////////

glMatrixMode(GL_PROJECTION);
glPopMatrix();  // 元に戻してやるのを忘れない
glMatrixMode(GL_MODELVIEW);

みたいにして、一度平行投影で座標系をウィンドウにあわせてやる必要がある。

2.wglを使う

Windows限定になるけれど、一番お手軽な方法。
wglUseFontOutlinesW, wglUseFontBitmaps
というそのものズバリな機能がある。

3.TrueType、PostScriptフォントを利用する(不明)

そもそもできるの?できたとしても超面倒そうなのでヘタレな漏れは他の方法をあたりまつ('A`)

4.その他

Googleの世界をさまよっていたところ、YS FLIGHT SIMULATORのCAPTAIN.YS氏が独自のストロークフォントプログラムを公開されているのを発見。こりゃ便利だ。感謝。

ちなみに線の太さを変えるには

glLineWidth(1.0f);

とかで。

glEnable(GL_LINE_SMOOTH);

とすればアンチエイリアスがかかります。