最終更新:
mikk_ni3_92 2009年07月02日(木) 14:16:56履歴
現在地 >> メニュー >> 準備編05
INDEX:準備編04 << 準備編05
関連:freeglut
GLUT(The OpenGL Utility Toolkit)はバージョン3.7で更新が止まっている。
そのGLUTの互換ライブラリとして「freeglut」がある。
これは、glutの機能に加え、それを拡張しているライブラリである。
(※新たなコールバック関数の追加、プリミティブの追加などがされている)
【freeglut ホームページ】
以下はインストール例
すると「ReleaseStatic」「Release」「DebugStatic」「Debug」の4つのフォルダができ、
それぞれのなかに「デバッグバージョン」、「リリースバージョン」、「スタティックバージョン」
といったバージョン毎のファイルが作成される。
なお、visual studioのバージョンによってはこれではうまくいかない場合もある。
その場合、「VisualStudio2008フォルダ」があるのでその中のプロジェクトでビルドする。
※以下はリリースバージョンのインストールでの話です。
glutと同じ。
※freeglutのglut.hをインクルードすればよい。
【例】:シェルピンスキー四面体を描画
【メモ】
freeglut内の「glut.h」はファイル内で「freeglut_std.h」をインクルードしているだけである。
従って、もし、glut ver.3.7から拡張された関数を使う場合は、「freeglut_ext.h」もインクルードする必要がある。
このプログラム例では、「freeglut.h」をインクルードすることで、
「freeglut_std.h」「freeglut_ext.h」の両方がインクルードされている。
INDEX:準備編04 << 準備編05
関連:freeglut
GLUT(The OpenGL Utility Toolkit)はバージョン3.7で更新が止まっている。
そのGLUTの互換ライブラリとして「freeglut」がある。
これは、glutの機能に加え、それを拡張しているライブラリである。
(※新たなコールバック関数の追加、プリミティブの追加などがされている)
【freeglut ホームページ】
以下はインストール例
- ここからダウンロードする。
- 「freeglut.dsp」を開き、[ビルド] → 全て選択を選んでから[バッチビルド]。
- 「freeglut_static.dsp」を開き、[ビルド] → 全て選択を選んでから[バッチビルド]。
すると「ReleaseStatic」「Release」「DebugStatic」「Debug」の4つのフォルダができ、
それぞれのなかに「デバッグバージョン」、「リリースバージョン」、「スタティックバージョン」
といったバージョン毎のファイルが作成される。
なお、visual studioのバージョンによってはこれではうまくいかない場合もある。
その場合、「VisualStudio2008フォルダ」があるのでその中のプロジェクトでビルドする。
※以下はリリースバージョンのインストールでの話です。
ヘッダファイルは"freeglut.h", "freeglut_ext.h", "freeglut_std.h","glut.h"を
「C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\gl」にコピー
この時、「gl.h」「glu.h」「glaux.h」が同一ファイル内に存在している必要がある。
もし、従来のglut.hを残しておく場合は、新たにフォルダを作成しそこにコピーすればよい。
(例)「freegl」フォルダを作って、
「C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\freegl」にコピー
「C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\gl」にコピー
この時、「gl.h」「glu.h」「glaux.h」が同一ファイル内に存在している必要がある。
もし、従来のglut.hを残しておく場合は、新たにフォルダを作成しそこにコピーすればよい。
(例)「freegl」フォルダを作って、
「C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\freegl」にコピー
「ReleaseStatic」「Release」フォルダの"freeglut.lib" か "freeglut_static.lib" を
「C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib」
にコピー。("opengl32.lib", "glu32.lib","glaux.lib"と同一ファイル内におく)
「freeglut.dll」は「"C:\Windows\System32"」にコピーしておく。
「C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib」
にコピー。("opengl32.lib", "glu32.lib","glaux.lib"と同一ファイル内におく)
「freeglut.dll」は「"C:\Windows\System32"」にコピーしておく。
glutと同じ。
※freeglutのglut.hをインクルードすればよい。
【例】:シェルピンスキー四面体を描画
#include <GL/freeglut.h>
//----------- プロトタイプ宣言 --------------//
void display();
void reshape(int w, int h);
void timer(int value);
//------------- OpenGLの初期設定 ------------------//
void GLUT_INIT()
{
glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE | GLUT_DEPTH); //ダブルバッファ、Zバッファ
glutInitWindowSize(640,480);
glutCreateWindow("free glut Primitive");
}
void GLUT_CALL_FUNC()
{
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutTimerFunc(0,timer,17);
}
void MY_INIT()
{
glClearColor(1.0, 1.0, 1.0, 1.0);
glEnable(GL_DEPTH_TEST);//ZバッファON
}
//------------- メイン関数 ----------------//
int main(int argc, char **argv)
{
glutInit(&argc,argv);
GLUT_INIT();
GLUT_CALL_FUNC();
MY_INIT();
glutMainLoop();
return 0;
}
//------------ ここからコールバック関数 ------------------//
void display()
{
static int r = 0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0,0,1);
glPushMatrix(); //行列退避
glRotated(double(r), 0.0, 1.0, 0.0); //[2].回転
static double data[]={0,0,0};
glutWireSierpinskiSponge(2,data,1);//シェルピンスキーの四面体
glPopMatrix(); //行列を戻す
glColor3f(1,1,1);
glutSwapBuffers();
if(++r > 360){
r= 0;
}
}
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION); //行列モード切替
glLoadIdentity(); //行列初期化
gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0);
glMatrixMode(GL_MODELVIEW); //行列モード切替
glLoadIdentity();
gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}
void timer(int t)
{
glutPostRedisplay();
glutTimerFunc(t,timer,17); //タイマー関数
}
【メモ】
freeglut内の「glut.h」はファイル内で「freeglut_std.h」をインクルードしているだけである。
従って、もし、glut ver.3.7から拡張された関数を使う場合は、「freeglut_ext.h」もインクルードする必要がある。
このプログラム例では、「freeglut.h」をインクルードすることで、
「freeglut_std.h」「freeglut_ext.h」の両方がインクルードされている。

