最終更新: 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」の両方がインクルードされている。