トップへ戻る
OpenGL機能を追加したdlib C++ ライブラリとAntTweakBarを使ったサンプル
OpenGL機能を追加したdlib C++ ライブラリとAntTweakライブラリを使ったサンプルです。
スクリーンショットの見た目は、GLUTのサンプルと殆ど同じですが、このサンプルはGLUTに依存しない代わりに
dlibに依存する形となっています。
このサンプルは、AntTweakBarライブラリのパッケージ中に含まれるサンプルプログラム TwSimpleGLUT.c をベースにしています。
TwSimpleGLUT.c では、GLUTのウィンドウに入るマウス移動やキー入力といったイベントに基づいて
AntTweakのウィジェットの場所や状態を更新するために、↓のようにglutへAntTweakBarライブラリに用意されているGLUT用のコールバック関数を登録しています。
// Set GLUT event callbacks
// - Directly redirect GLUT mouse button events to AntTweakBar
glutMouseFunc((GLUTmousebuttonfun)TwEventMouseButtonGLUT);
// - Directly redirect GLUT mouse motion events to AntTweakBar
glutMotionFunc((GLUTmousemotionfun)TwEventMouseMotionGLUT);
// - Directly redirect GLUT mouse "passive" motion
// events to AntTweakBar (same as MouseMotion)
glutPassiveMotionFunc((GLUTmousemotionfun)TwEventMouseMotionGLUT);
// - Directly redirect GLUT key events to AntTweakBar
glutKeyboardFunc((GLUTkeyboardfun)TwEventKeyboardGLUT);
// - Directly redirect GLUT special key events to AntTweakBar
glutSpecialFunc((GLUTspecialfun)TwEventSpecialGLUT);
// - Send 'glutGetModifers' function pointer to AntTweakBar;
// required because the GLUT key event functions do not report key modifiers states.
TwGLUTModifiersFunc(glutGetModifiers);
また、ウィジェットを再描画するために、Display関数とReshape関数をTwSimpleGLUT.c内に用意して、それを登録しています。
// Set GLUT callbacks
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
dlibでAntTweakBarを使うためにはこれらをdlib用に変換する必要があります。
マウス移動やキー入力に対応するコードは改造済ソース中のTwEventDLIB名前空間内に記述してあります。
Tw****GLUTのようなGLUT専用関数を無理やり使うという手もありますが、そこまでしなくても、AntTweakBarには
TwMouseButtonやTwKeyPressed関数のようにより一般的なイベント処理関数が用意されていますので、それぞれの
イベントメンバ関数(on_mouse_down、on_keydownなど)からこれらを呼び出しています。
Display関数やReshape関数は、glutコールバック登録関数で登録する代わりに、
再描画やウィンドウサイズ変更のイベントメンバ関数(paint_opengl、on_window_resized)から呼び出すようにしてあります。