Fl_Gl_Window以外のFLTKウィンドウでOpenGLを使う†Fl_Gl_Window以外でもgl_startとgl_finish関数を用いて,OpenGL描画を行うことができる. 手順†まず,gl.hをインクルードする. #include <FL/gl.h> GLフォルダに入れてある場合は GL/gl.h. Fl::visual の代わりに Fl::gl_visual を使ってウィンドウグラフィックスを設定する. Fl::gl_visual(FL_RGB); そして,draw関数内で gl_start と gl_finish 関数で囲んだ中にOpenGL命令を記述する.例えば, void draw(void) { gl_start(); // OpenGLコード gl_finish(); } 注意点†
コード例†以下にコード例を示す. #ifdef _DEBUG #pragma comment(lib, "fltkd.lib") #pragma comment(lib, "fltkgld.lib") #else #pragma comment(lib, "fltk.lib") #pragma comment(lib, "fltkgl.lib") #endif #pragma comment(lib, "opengl32.lib") //----------------------------------------------------------------------------- // インクルードファイル //----------------------------------------------------------------------------- #include "FL/Fl.H" #include "FL/Fl_Window.H" #include "FL/gl.h" //----------------------------------------------------------------------------- //! rxTestWindow クラス //----------------------------------------------------------------------------- class rxTestWindow : public Fl_Window { public: //! コンストラクタ rxTestWindow(int x_, int y_, int w_, int h_, const char *l_ = 0) : Fl_Window(x_, y_, w_, h_, l_) { resizable(this); // ウィンドウリサイズを可能に end(); } //! デストラクタ virtual ~rxTestWindow() { } private: //! 再描画イベント処理関数 void draw(void) { int w = Fl_Window::current()->w(); int h = Fl_Window::current()->h(); gl_start(); glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, 1, 0, 1, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glDisable(GL_LIGHTING); glColor3d(0.0, 0.0, 1.0); glBegin(GL_POLYGON); glVertex2d(0.1, 0.1); glVertex2d(0.9, 0.1); glVertex2d(0.5, 0.9); glEnd(); glPopMatrix(); gl_finish(); } }; //----------------------------------------------------------------------------- // メイン関数 //----------------------------------------------------------------------------- /*! * メインルーチン * @param[in] argc コマンドライン引数の数 * @param[in] argv コマンドライン引数 */ int main(int argc, char *argv[]) { Fl::scheme("gtk+"); // gl_startを用いる場合はvisualの代わりにgl_visualを使う Fl::gl_visual(FL_RGB); rxTestWindow *window = new rxTestWindow(100, 100, 480, 480, "FLTK + OpenGL"); window->show(argc, argv); return Fl::run(); } 描画結果は以下. |