Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QGLWidget中的透明着色器导致透明背景(透明)_Qt_Opengl_Transparency_Alphablending_Multisampling - Fatal编程技术网

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

Qt QGLWidget中的透明着色器导致透明背景(透明),qt,opengl,transparency,alphablending,multisampling,Qt,Opengl,Transparency,Alphablending,Multisampling,我有一个QGLWidget: GlWidget::GlWidget(QWidget *parent) : QGLWidget(QGLFormat(QGL::SampleBuffers), parent) 对于抗锯齿,我最近实现了Samplebuffer 对于一些透明网格,我使用了GL\u BLEND函数: void GlWidget::initializeGL() { ... glEnable(GL_MULTISAMPLE); glEnable(GL_BLEND); glBlendFunc(G

我有一个QGLWidget:

GlWidget::GlWidget(QWidget *parent)
: QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
对于抗锯齿,我最近实现了
Samplebuffer

对于一些透明网格,我使用了
GL\u BLEND
函数:

void GlWidget::initializeGL()
{
...
glEnable(GL_MULTISAMPLE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
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
...
}
我的小部件也在
painGL()函数中绘制了背景:

void GlWidget::initializeGL()
{
...
glEnable(GL_MULTISAMPLE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
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
...
}
我遇到的问题是,在渲染透明网格的地方,窗口变得透明

我希望将
混合
应用于我绘制的彩色背景

我试图在绘图前用非透明白色清除小部件,但这没有帮助

有关更多说明,请参见此图:


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

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

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);