概要
3DCGの描画を行うためのライブラリであるfreeglutの環境構築を行いました。
簡単なC++ソースを書いてティーポットを表示するところまで行いました。

おまけで、openglドライバのバージョン取得もしました。
※本記事では、windowsでvisual studioがインストールされていることを前提にします。詳しい環境については記事末尾をご覧ください。
そもそもfreeglutとは
windowsには標準でopengl32.dllというdllが付属しています。
openglとはKhronosグループによって策定されたオープンなAPIで、これを呼び出すことで描画処理が行えます。
ただしopenglそのものはAPIにすぎず、実装はmicrosoftやGPUベンダ(AMD, NVIDIAなど)が行っています。opengl32.dllはmicrosoftが実装したものです。
openglとwindowsAPIを使えば描画処理を書いて動かせるのですが、
- 簡単な処理でもソース量が多くなりがち
- Windowsでしか動かない
という点が微妙です。
freeglutを使うとこれを解決することができます。
なお、freeglutよりもモダンな書き方をできるglfwというまた別のライブラリがあって、そちらの方が人気なようです。
glfwの環境構築はこちらの記事がわかりやすそうです。(私はまだ試せていませんが…)
freeglutの環境構築
1. freeglutのダウンロード
freeglutをダウンロードします。
公式サイトやgithubリポジトリのReleasesからダウンロードできます。
ダウンロードしたら解凍します。tar.gz形式になっているので、7zipなどのソフトを使って解凍します。
2. freeglutのビルド
まずはreadmeを読みます。すると、cmakeでビルドするよう書いてあります。
ですのでまずcmakeをインストールします。手順は省略します。
ここで、cmakeとはソリューション(visual studioでビルドする用のファイル)などを生成するソフトウェアです。
cmakeをインストールしたら、readme.cmakeの手順に従ってソリューションを生成します。英語なので、雑ですが訳しておきます。
- cmakeをダウンロードする。バイナリディストリビューションのリリースの中から選ぶ。
- cmakeインストーラーを起動し、好きな場所にインストールする。
- スタート→cmake→cmake(cmake-GUI)を起動する。(インストーラーがデスクトップに置くショートカットはGUIへのショートカットではないことに注意!)
- "Where is the source code"ボックスに、freeglutソースフォルダを入力/ブラウズする(/freeglutであって/freeglut/srcではない。)
- "Where to build the binaries"には好きなディレクトリを入力する。ここにVisual Studioソリューションが生成される。このフォルダはまだ存在しなくてもよい。
- Configureボタンを押す。
- ターゲットコンパイラを選ぶ。
- フォルダを作るか聞かれたらokボタンを押す。
- configureが終わるまで待つ。
- configurationオプションが出てくる。例えば、静的ライブラリを作るかなど(訳注:原文では、下の方に完璧なリストがあります)。選んだら再度Configureボタンを押す。
- Generationボタンが押せるようになる。ボタンを押す。
- ビルドファイルが指定フォルダにできている。
オプションについてですが、今回は動的ライブラリのみを使います。
できたslnファイルを実行するか、Visual studioでビルドファイルのフォルダを選ぶと、visual studioでのビルドができた状態になります。
こちらもreadme.cmakeに記述があるのでそれに従います。
- "C++でのデスクトップアプリ開発"ワークロードをVSにインストールしておく。
- VSでプロジェクトフォルダを開く。この時点で、VSはCMakeを自動的に構成しようとする。完了したら、[ビルド]-[構成マネージャ]を開きさらなる変更をする。
- [ビルド]-[すべてのビルド]を実行する。デフォルトでは、「out」サブフォルダ(訳注:binの間違いか?)を作成してそこにビルド生成物ができる。
ビルドするといろんなものができるのですが、今回はbin\Debug配下のfreeglutd.dllとfreeglutd.pdbを使います。
生成物を使ってプログラムを書く
今回はティーポットを描画するプログラムを書きました。
とはいっても数か月前に作ったフォルダに置いてあったもので、自分で書いたんだかネットで拾ってきたんだったかchatGPTに書いてもらったんだか忘れてしまいました。
冒頭で述べたように、おまけとしてopenglドライバのバージョンを吐き出すようにしました。
#include "GL/glut.h"
#include <stdio.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -5.0f); // カメラ位置を調整
glColor3f(1.0f, 0.5f, 0.0f); // ティーポットの色
glutSolidTeapot(1.0); // ティーポットを描画
glutSwapBuffers();
}
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, (double)w / (double)h, 1.0, 100.0);
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("Teapot");
glEnable(GL_DEPTH_TEST);
// openglのバージョンを取得
char *cptr;
cptr = (char *)glGetString(GL_VERSION);
printf(cptr);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
├lib
└freeglutd.dll
├teapot.cpp
このようにソースとライブラリを配置し、以下のコマンドでビルドします。
※x64用の開発者用コマンドプロンプトを選ぶことに注意
link test.obj /LIBPATH:lib
VSだとopengl32.dllとglu32.dllはデフォルトでリンクするようです。
mingwのgccでコンパイルする際は以下のようにします。
gcc test.cpp -L./lib -lfreeglutd -lopengl32 -lglu32
動作確認環境まとめ
最後に、動作確認した環境をまとめておきます。
- Microsoft Visual Studio Community 2022 (64 ビット) - Current Version 17.14.19
- CMake 4.0.1
- gcc.exe (x86_64-win32-seh-rev2, Built by MinGW-W64 project) 12.2.0
- freeglut - 3.8.0
最後までお読みいただきありがとうございました。