我很沮丧我在QT 4.6应用程序的主窗口中有一个小部件,它已配置为openGL小部件。它绘制得很好,除了我无法清除帧之间的背景。当他的窗口打开时,我得到一个黑色的背景,此后再也看不到,所以随着时间的流逝,我得到了困惑的渲染对象。我还必须在paintGL()函数的末尾调用swapBuffers(),以使小部件显示最新的帧,这使我感到困惑,因为在印象中我会自动调用swapBuffers()。我设置为双缓冲,并且不共享小部件。以下是相关代码:

void GLWidget::paintGL ( )
{
    m_Input.Draw();
    QGLWidget::swapBuffers();
}

void GLWidget::initializeGL ( )
{
    qglClearColor(QColor(0,0,255,128));
    glClear(GL_COLOR_BUFFER_BIT);
}

似乎双重缓冲有些不对劲。将屏幕清除为背景色是非常基本的。但这让我发疯了为什么它不起作用。绘图代码的其余部分工作正常。有任何想法吗? (这是在Linux系统上。)

最佳答案

glClear是绘图操作。它不属于initializeGL,而是paintGL。清除颜色也应在调用glClear之前设置好,因此请一起移动[q]glClearColor

更新资料

paintGL方法应如下所示:

void GLWidget::paintGL()
{
    qglClearColor(QColor(0,0,255,128));
    glClear(GL_COLOR_BUFFER_BIT);
    // you probably also want to clear the depth and stencil buffers
    // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

    m_Input.Draw();

    QGLWidget::swapBuffers();
}

当然,您必须确保m_Input.Draw()不会再次使事情困惑。您没有显示代码,所以我在这里是盲目的。

关于c++ - QGLWidget忽略glClear,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20437595/

10-10 08:34