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

QOpenGLWidget resize results in incorrect viewport size

我的 QOpenGLWidget 调整大小功能有一些问题。显然,我的目标是使用正确数量的像素和以我 window 的实际中心为中心的场景的新视口。但是这两件事不知何故。

这是一些图片:

第一个:

Y 缩放:

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。当我 运行 这段代码时,我有一个像素化和翻译的图像我做错了什么?

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

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

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