現在地: メニュー >> 発展編03 >> 発展編03::複数ウィンドウ
関連:発展編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()関数を呼び出す関数 )
	}
}


サンプルコード

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます