グラフィックス(SDL + OpenGL, OpenSceneGraph)

SDL+OpenGL/4.日本語文字列を描画する

最終更新: 2015-04-29 (水) 11:57:56 (1330d)

OpenGLはテキストを表示するための標準的方法を提供してはくれない。 アルファベットだけならまだしも日本語となるとさらにやっかい。 でも、SDL_ttf を使うことで日本語テキストをサーフェイス(SDL_Surface)に出力することができる。 このプログラムでは、新たに Font クラスを導入する。 文字列からサーフェイスを得る方法を知ることができる。 サーフェイスにしてしまえばテクスチャにする方法はもう簡単だね。

ただし、SDL_ttf に入力するためには(たぶん)文字コードをUTF-8にしなければならない。 UTF-8 の日本語文字コードを得るための方法は色々ある。 プログラム自体をUTF-8にしておくというのも一つの方法。 だが、この方法だとVC++が認識できない文字列が存在するとコンパイルを拒否される。 このサンプルでは「text.txt」というファイルに UTF-8 で表示対象となる文字列を書いておき、 実行時に読み込むという方法を採っている。 他にもICUを使った日本語の表示などの方法がある。


スクリーンショット


上図は、本サンプルプログラムのスクリーンショットである。

ソースコード

解説

このプログラムには一部だが Windows 依存の記述がある。 それは Font::getFont メソッドだ。 フォントが置いてあるディレクトリを取得する一般的方法が無いため、 このメソッドでは Windows 依存となる SHGetSpecialFolderPath 関数を使ってフォントディレクトリを取得している。 UNIX 系で Font クラスを使うためには、Font::getFont メソッドを書き換える必要がある

SHGetSpecialFolderPath関数を使うためには、shell32.libを追加する必要がある。

コメント

最新の10件を表示しています。 コメントページを参照

  • ここのソースをwin7、VC++2010環境で実行したらエラーになりました。getFont関数内に不具合が出るようです -- 2011-08-04 (木) 23:40:36
  • ↑const char* と TCHARの型が不一致のエラーは、変換に関する処理を入れたら治りました。 参考:http://note.phyllo.net/?eid=1106043 -- 2011-08-04 (木) 23:43:50
  • ↑TTF_OpenFont()がnullになるエラーは、その前にTTF_Init()で初期化すると治りました。 -- 2011-08-04 (木) 23:45:47
  • 情報ありがとうございます。参考を元に直してみようと思います。 -- トゥイー 2011-08-08 (月) 04:11:23
  • 頂いた情報を元にサンプルを修正しました。Microsoft Visual C++ 2010 Express で確認しましたのでプロジェクト毎上げました。 -- トゥイー 2011-10-22 (土) 16:30:18
お名前: