【问题标题】:Transparent Shader in QGLWidget leads to transparent background (see through)QGLWidget 中的透明着色器导致透明背景(透视)
【发布时间】:2023-03-28 07:50:01
【问题描述】:

我有一个 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 之前,问题并未出现。

【问题讨论】:

    标签: qt opengl transparency alphablending multisampling


    【解决方案1】:

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

    glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
    

    【讨论】:

      猜你喜欢
      • 2021-07-02
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 2011-12-15
      • 2014-08-21
      • 1970-01-01
      • 2011-03-08
      • 2017-12-13
      相关资源
      最近更新 更多