GLFW3 を VC2005EE で使う

2014年08月28日 ― [ 日記/コンピュータ/プログラム ]

OpenGLを使うためのライブラリの一つ、GLFW。そのバージョン3をVisual C++ 2005 Express Editionで使えるようにするための作業の記録。

環境はWindows 7 Proの32ビット版。

cmake のインストール

どうもGLFWのバイナリは新しい方から数えて二つのバージョン用にしか用意してくれないらしい。今の最新版3.0.4では2012と2013用しかない。よって自分でコンパイルすることになる。

コンパイルを手動でするのは面倒そうだが、支援ソフトのcmakeが使えるようになっているので結構楽に行く。

まずはcmakeをインストール。

公式サイトに行ってインストーラを落としてくる。

インストールの際には、環境変数Pathにcmakeの場所を追加するか聞いてくるので、これは追加するように設定する。

(但し、私の場合はPathが長すぎて設定に失敗したという旨の警告がでてきたので手動で追加した。初期設定なら追加するのは"C:\Program Files\CMake\bin")

ここで、コマンドプロンプトを開いて、"cmake"とコマンドを打った時に文字が流れれば成功。見つからないなどと言われる場合は失敗している。環境変数がきちんと設定されているか確認するべし。

GLFW のコンパイル

公式サイトからソースのZIPを持ってきて適当な場所(とはいってもずっと置いておけるような場所にするべき)に解凍する。

このフォルダ(名前は「glfw-3.0.4」など)を以下では「(GLFWのルートフォルダ)」と書くことにする。

(GLFWのルートフォルダ)の中にbuiltというフォルダを作る。

「Visual Studio 2005 コマンド プロンプト」(スタートメニューの「Visual C++ 2005 Express Edition」の中から起動できる)を管理者権限で起動。cdコマンドで先程作ったbuiltフォルダに移動する。

そこで"cmake .."(ピリオドは2つ。一個上のフォルダを指す)と入力、実行するとbuiltフォルダの中にいろいろなファイルが生成される。

(私はここで散々「No CMAKE_C_COMPILER could be found.」というエラーメッセージに悩まされた。これは試行錯誤の結果、上で書いたように、普通のコマンドプロンプトではなく「Visual Studio 2005 コマンド プロンプト」を管理者権限で実行するという方法で回避できた。どちらがキーになっていたのかはよく分からない)

生成されたファイルの中に「GLFW.sln」があるはずなので、これをVC2005で開く。たくさんのプロジェクトが並んでいるが、その中から「glfw」を選んでそれだけをビルドすれば良い。(他のはサンプルや動作確認用のプログラム)

(GLFWのルートフォルダ)\built\src\debug(又はrelese)にglfw3.libが出来上がる。これでglfwのコンパイルは完了。

GLFW を使ってみる

いつものようにVCで新規プロジェクトを作る。

このときは空のコンソールアプリケーションに設定する。

main.cppをつくり、http://www.glfw.org/docs/3.0/quick.htmlの一番下にあるサンプルコードを入力する。

以下、GLFWを使えるように設定する。

まず、VCの「ツール>オプション>プロジェクト及びソリューション>VC++ディレクトリ」の「インクルードファイル」に「(GLFWのルートフォルダ)\include」を追加する。

※「(GLFWのルートフォルダ)\include\GLFW」ではないことに注意。

次に、先程作ったglfw3.libをプロジェクトフォルダ(main.cppと同じフォルダ)にコピーしてくる。

その後、main.cppの先頭に、

#pragma comment(lib, "GLFW3.lib")
#pragma comment(lib, "opengl32.lib")

の二行を追加する。

これでビルド→実行すると、コンソールウインドウとともに黒い窓が開き、そこで色相環みたいなものが回るプログラムが動く。

これでとりあえず動作確認は完了。


ICUなるライブラリ

2013年07月17日 ― [ 日記/コンピュータ/プログラム ]

そもそも FreeType を使うためには文字を Unicode で指定するのだが、これをどう変換するかが問題だった。Unicode が複雑そうでかつ文字列の処理はマルチバイトのほうが楽そうなために(あとついでに後方互換性のために)マルチバイト文字列(CP932?)で処理する設定にしているためだ。

調べてみると MultiByteToWideChar() なんかを使う方法が出てくるのだが、WinAPI の函数らしく、あまり使いたくない。

他を探してみると ICU なるライブラリがあった。以下のページに使い方と参考リンクが載っている。

日本語情報がちゃんとあるので使うのに苦労はなさそう。

ただ、コンパイルに Cygwin が必要というのがどうも…… デュアルブートで一応 Vine Linux を入れているのだが、そっちでビルドしてしまえないのだろうか。まあ Unix 系環境での make だとかを未だよく理解していないので Cygwin インストールした方が早いのだろうけれど。

処理元のテキストは EUC-JP がその特性上処理しやすそう。ただ、内部処理を試しに Unicode に変えてみても何もエラーが出なかった。もう Unicode にしてしまっても良いかもしれない。

話は変わりIPAmj明朝について。どうもグリフ名を指定して文字を呼び出すことさえ出来れば全文字使えるらしい。(参照:IPAmj明朝フォントの研究 - FIELD NOTES: 書を持って街へ出よう )ただ、FreeType の函数一覧を見てもそのような函数が見つけられない。可能なのだろうか。


DXライブラリでFreeType

2013年04月28日 ― [ 日記/コンピュータ/プログラム ]

DXライブラリは Windows アプリケーションとしての部分を意識せずに DirectX を使ったプログラムを作成できる素晴らしいライブラリである。

しかし、デフォルトの文字描画函数は WindowsAPI を用いたものであり、重い上にアンチエイリアスはあまり綺麗にはかからない。ついでに禁則処理などは用意されていないためもとのテキストを弄るなどしなくてはならない。

よって、Linux や Mac Type で用いられているフォントレンダリングエンジン「FreeType」で組版し、画像として出力するようなエンジンを作ってゆきたい。

[ 続きを読む ]