我一直在努力解决这个问题。
我有一个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 配置无关。任何帮助将不胜感激,谢谢!