QGLWidget中的透明着色器导致透明背景(见下)

时间:2015-03-12 16:49:26

标签: qt opengl transparency alphablending multisampling

我有一个QGLWidget:

GlWidget::GlWidget(QWidget *parent)
: QGLWidget(QGLFormat(QGL::SampleBuffers), parent)

对于抗锯齿,我匆匆实施了Samplebuffer

对于某些透明网格,我使用了GL_BLEND函数:

void GlWidget::initializeGL()
{
...
glEnable(GL_MULTISAMPLE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

我的小部件也有painGL()函数中绘制的背景:

void GlWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glBegin(GL_QUADS);
glColor4f(0.67,0.67,0.75,1);
glVertex2f(-1.0,-1.0);
glVertex2f(1.0,-1.0);
glColor4f(0.2,0.2,0.2,1);
glVertex2f(1.0, 1.0);
glVertex2f(-1.0, 1.0);
glEnd();

// other object drawing stuff
...
}

我遇到的问题是窗口在透明网格渲染的地方变得透明。

我希望将BLEND应用于我绘制的彩色背景。

我尝试在绘制内容之前清除没有透明白色的小部件,但这没有帮助。

有关详细说明,请参阅此图片:http://i.stack.imgur.com/AZx3f.png

在我实现SampleBuffers之前,问题没有出现。

1 个答案:

答案 0 :(得分:0)

我搜索了几个小时,简单的解决方案是:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);