如何在QGLWidget中查找OpenGL的等效函数?

use*_*121 1 qt glut qglwidget

我是OpenGL和Glut的新手.Glut实施了一个项目.我用Google搜索并发现Qt中有一个名为QGLWidget的OpenGL实现.但是,我很难将旧的Glut代码转换为新的Qt代码,因为我不知道如何在Qt中找到Glut函数的等效函数.部分代码如下所示:

glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(gray1->width,gray1->height);
glutInitWindowPosition(100,100);
glutCreateWindow("hello");
init();
glutDisplayFunc(&display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutMotionFunc(mouse_move);
glutMainLoop();
Run Code Online (Sandbox Code Playgroud)

Qt的文档中不存在上述过剩函数.所以我的问题是如何在QGLWidget的函数中找到等效的glut函数?

aze*_*r89 6

您需要实现从QGLWidget继承的自己的类,例如:

    class GLWidget : public QGLWidget
    {
        Q_OBJECT

    public:
        GLWidget(QWidget *parent = 0);

    protected:
        void initializeGL();
        void resizeGL(int w, int h);
        void paintGL(); 

        void mousePressEvent(QMouseEvent *event);
        void mouseMoveEvent(QMouseEvent *event);
        void mouseReleaseEvent(QMouseEvent *event);

    };
Run Code Online (Sandbox Code Playgroud)

您还需要覆盖三个重要的函数,初始化 GL (),您正在准备OpenGL.resizeGL(),如果面板调整大小,则更新视口和投影矩阵,并绘制实际渲染的paintGL().

当然,窗口初始化由Qt处理.

对于鼠标事件,您可以覆盖三个函数:mousePressEvent(),mouseMoveEvent()mouseReleaseEvent()

void GLWidget::initializeGL() 
{
    glClearColor(0.5, 0.5, 0.5, 1.0);
}

void GLWidget::resizeGL(int width, int height) 
{   
    glViewport(0, 0, width(), height());
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, width(), 0, height());
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void GLWidget::paintGL() 
{
    glClear(GL_COLOR_BUFFER_BIT);

    // draw a red triangle
    glColor3f(1,0,0);
    glBegin(GL_POLYGON);
    glVertex2f(10,10);
    glVertex2f(10,600);
    glVertex2f(300,10);
    glEnd();
}
Run Code Online (Sandbox Code Playgroud)