QOpenGLWidget调整大小导致视口大小不正确

时间:2016-03-30 12:29:55

标签: c++ qt opengl resize viewport

我的QOpenGLWidget调整大小功能存在一些问题。显然,我的目标是一个具有正确像素数量的新视口和一个以窗口实际中心为中心的场景。但是这两件事情都不合时宜了。

以下是一些图片:

最初的一个:

Correct

在Y中缩放:

Scaled in Y

在X中缩放:

Scaled in X

结果是像素化和翻译的。对我来说,它看起来像GL视口具有正确的像素数量,但是缩放到顶部和右边(如果(0,0)被定义为左下角)。

这是我的代码:

void GLWidget::initializeGL() {
    QOpenGLFunctions::initializeOpenGLFunctions();
    glClearColor(0.7f, 0.75f, 0.8f, 1.0f);
    glEnable(GL_MULTISAMPLE);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}

void GLWidget::resizeGL(int w, int h) {
    qreal aspect = qreal(w) / qreal(h ? h : 1);
    const qreal zNear = 3, zFar = 7, fov = 3.14/6;
    //I will leave this at it is. This cannot cause the viewport translation
    mGraphics->setProjectionPers(fov, aspect, zNear, zFar);
}

void GLWidget::paintGL() {

    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_DEPTH_BUFFER_BIT);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);

    //actual Drawing
    //...
}

使用正确的值调用resizeGL。当我运行这段代码时,为了获得像素化和翻译的图像我做错了什么?

1 个答案:

答案 0 :(得分:1)

无论出于何种原因,这都在我的QOpenGLWidget后代的头文件中:

void resizeEvent(QResizeEvent* ev) {
    resizeGL(width(), height());
}

这几乎会跳过QOpenGLWidget类的所有调整大小逻辑。