gpt4 book ai didi

c++ - QGLWidget 忽略 glClear

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:19 27 4
gpt4 key购买 nike

我被难住了。我在已配置为 openGL 小部件的 QT 4.6 应用程序的主窗口内有一个小部件。它画得很好,除了我无法清除帧之间的背景。当他的窗口打开时我得到一个黑色背景并且之后它永远不会清除,所以随着时间的推移我会得到一团乱七八糟的渲染对象。我还必须在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com