最終更新:
mikk_ni3_92 2008年12月09日(火) 16:23:51履歴
現在地: メニュー >> 発展編03 >> 発展編03::複数ウィンドウ
関連:発展編03::サブウィンドウ
複数のウィンドウを作る場合には、それぞれのウィンドウで、設定を行う。
[例]
※メモ
「glutCreateWindow()」関数の返り値は「int」であり、これがウィンドウのIDとなる。
記憶しておくとべんりである。
ウィンドウを複数作ると、どちらか片方がカレントウィンドウになる。
カレントウィンドウの切り替えは「glutSetWindow()」で行う。
[例]
このようにすると、0番目のウィンドウが再描画される。
複数のウィンドウそれぞれでアニメーションをする場合、
カレントウィンドウをきりかえながら再描画をする。
「Idle関数」が特定のウィンドウに登録されるコールバック関数ではないことを利用する。
[例]
サンプルコード
関連:発展編03::サブウィンドウ
複数のウィンドウを作る場合には、それぞれのウィンドウで、設定を行う。
[例]
int WinID[2]; //ウィンドウID ... ... int main(int argc, char **argv) { glutInit(&argc,argv); //ウィンドウ1つ目 glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE|GLUT_DEPTH); glutInitWindowSize(640,480); WinID[0] = glutCreateWindow("Window 1"); GLUT_CALL_FUNC(); //コールバック関数の登録 MY_INIT(); //各種初期化 //ウィンドウ2つ目 glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE|GLUT_DEPTH); glutInitWindowSize(320,240); WinID[1] = glutCreateWindow("Window 2"); GLUT_CALL_FUNC2();//コールバック関数の登録 MY_INIT2();//各種初期化 ... ... glutMainLoop(); return 0; }
※メモ
「glutCreateWindow()」関数の返り値は「int」であり、これがウィンドウのIDとなる。
記憶しておくとべんりである。
ウィンドウを複数作ると、どちらか片方がカレントウィンドウになる。
カレントウィンドウの切り替えは「glutSetWindow()」で行う。
[例]
glutSetWindow(WinID[0]); //0番目のウィンドウに切り替え glutPostRedisplay(); //再描画 (※display()関数を呼び出す関数 )
このようにすると、0番目のウィンドウが再描画される。
複数のウィンドウそれぞれでアニメーションをする場合、
カレントウィンドウをきりかえながら再描画をする。
「Idle関数」が特定のウィンドウに登録されるコールバック関数ではないことを利用する。
[例]
int WinID[2]; //ウィンドウID int WindowNum = 0; //ウィンドウの数 ... ... void idle(void) { for(int loop = 0; loop < WindowNum; ++loop){ glutSetWindow(WinID[loop]); glutPostRedisplay(); //再描画 (※display()関数を呼び出す関数 ) } }
サンプルコード
- 発展編03::まとめコード1
- 発展編03::まとめコード2(関数ポインタで少し整理したver)