0

我一直在努力解决这个问题。

我有一个QOpenGLWidget对象,用于使用着色器(3.30 核心配置文件)在 OpenGL 上下文中渲染纹理(图像)和点云(GL_POINTS)。

一切正常,但是当我尝试使用QPainter渲染一些文本时,点云的透明度消失了。只需将其添加到 QOpenGLWidget 的paintGL()函数即可发生这种情况:

QPainter painter(this);

这些点变为实心(不透明),否则不会发生。当然,我可以摆脱 QPainter 并使用更多的着色器来渲染文本,但我只是感到困惑,因为我不希望会发生这种情况。我可能在 OpenGL 设置中遗漏了一些东西,但我无法理解它。

这就是我配置 OpenGL 上下文的方式:

    QSurfaceFormat format;
    format.setVersion(3, 3);
    format.setDepthBufferSize(24);
    format.setProfile(QSurfaceFormat::CoreProfile);
    format.setRenderableType(QSurfaceFormat::OpenGL);
    QSurfaceFormat::setDefaultFormat(format);

    glDisable(GL_CULL_FACE);
    glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
    glEnable(GL_POINT_SMOOTH);
    glEnable(GL_LINE_SMOOTH);
    glEnable(GL_POINT_SPRITE);
    glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
    glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

虽然,我认为这个问题与 OpenGL 配置无关。任何帮助将不胜感激,谢谢!

4

0 回答 0