在FLTK中很容易使用OpenGL进行图形编程的,我们只需要使用它的Fl_Gl_Window构件,重新定义一个派生于Fl_Gl_Window的类,重载draw()和handle()就可以。所需要的代码和步骤如下
注意
1. 编译时需要包含openGL32的库文件,名字在不同的平台名字稍微不同。
2. 使用<FL/gl.h>代替<GL/gl.h>头文件,不要使用后者的头文件。
[代码] 包含以下头文件
1 | #include <FL/Fl.H> |
2 | #include <FL/gl.h> |
3 | #include <FL/Fl_Gl_Window.H> |
[代码] 定义一个子类,如下代码所示
1 | class MYGLWindow : public Fl_Gl_Window |
2 | { |
3 | void draw(); //作图操作 |
4 | void handle( int ); //消息事件处理 |
5 | public : |
6 | MYGLWindow( int x, int y, int w, int h, const char *L) : Fl_Gl_Window(x,y,w,h,L){}; |
7 | }; |
[代码] 实现draw()事件
01 | void MYGLWindow::draw() //作图 |
02 | { |
03 | if ( ! valid() ) |
04 | { |
05 | //设置viewport窗口大小等等 例如 |
06 | /********************************************** |
07 | valid(1); |
08 | glLoadIdentity(); |
09 | glViewport(0,0,w(),h()); |
10 | ***********************************************/ |
11 | } |
12 | //添加使用OPENGL作图操作 |
13 | /** ……..*/ |
14 | }; |
[代码] 事件处理实现
1 | void MYGLWindow::handle( int event) //事件处理 |
2 | { switch (event) |
3 | { case FL_PUSH : //操作等 |
4 | return 1; |
5 | case ……. |
6 | } |
7 | } |