1.6OpenGL编程

在FLTK中很容易使用OpenGL进行图形编程的,我们只需要使用它的Fl_Gl_Window构件,重新定义一个派生于Fl_Gl_Window的类,重载draw()和handle()就可以。所需要的代码和步骤如下:

  1. 包含以下头文件

    #include <FL/Fl.H>
    #include <FL/gl.h>
    #include <FL/Fl_Gl_Window.H>
    
  2. 定义一个子类,如下代码所示

    class MYGLWindow : public Fl_Gl_Window
    {
        void draw(); //作图操作
        void handle( int ); //消息事件处理
    
        public :
        MYGLWindow(int x,int y,int w,int h,const char *L) : Fl_Gl_Window(x,y,w,h,L){};
    };
    
  3. 实现draw()事件

    void MYGLWindow::draw() //作图
    {
        if(!valid())
        {
             //设置viewport窗口大小等等 例如
            /**********************************************
            valid(1);
            glLoadIdentity();
            glViewport(0,0,w(),h());
            ***********************************************/
        }
        //添加使用OPENGL作图操作
    };
    
  4. 事件处理实现

    void MYGLWindow::handle( int event) //事件处理
    {  
        switch (event)
        {  
            case FL_PUSH :  //操作等
            return 1;
            case ……
        }
    }
    

注意

  1. 编译时需要包含openGL32的库文件,名字在不同的平台名字稍微不同。
  2. 使用<FL/gl.h>代替<GL/gl.h>头文件,不要使用后者的头文件。

例子程序比较长,附在参考中。运行显示,弹出菜单后如图所示: