Qt QOpenGLWidget glClearColor功能不正常
Qt QOpenGLWidget glClearColor not functioning correctly
当从paintGL()之外的不同地方调用glClearColor时,我有一个小问题。目的是让用户能够在飞行中设置清晰的颜色,但这并不像计划的那样工作,除非在paintGL中每帧调用glClearColor。
目的:
void GLWidget::mousePressEvent(QMouseEvent *event)
{
m_lastPos = event->pos();
glClearColor(1.0f, 0.0f, 0.0f, 1.0f); //<-- Doesn't change clear colour
}
最优处理:
void GLWidget::mousePressEvent(QMouseEvent *event)
{
m_lastPos = event->pos();
r = 1.0f;
g = 0.0f;
b = 0.0f;
a = 1.0f;
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glClearColor(r, g, b, a);
...
我认为这与Qt交换缓冲区和更新屏幕的方式有关,但目前尚不清楚究竟是什么导致了它。如果有什么想法就太好了。
我认为这与Qt交换缓冲区和更新屏幕的方式有关,但目前尚不清楚究竟是什么导致了它。有什么好主意就太好了。
错,它与做OpenGL调用没有OpenGL上下文绑定。你必须在做任何OpenGL调用之前调用makeCurrent
。
为什么它在paintGL
中工作呢?因为Qt在调用paintGL
, resizeGL
和initializeGL
之前自动使上下文当前(参见它们的文档)。
我不认为@peppe回答正确,因为你不需要调用makeccurrent(),因为Qt已经
在我看来,你真正需要的只是在mousePressEvent
中调用update()
。
如果你不想调用paintGL()来更新,你只需要调用update()
同样,你应该知道在glClearColor()
中,你只在OpenGL状态机上设置clearColor属性。glClear(GL_COLOR_BUFFER_BIT)
是真正清除颜色缓冲的函数。所以你应该在调用glClear()
之前设置clearColor为glClearColor()
。
如果我是你,代码会是这样的:
void GLWidget::mousePressEvent(QMouseEvent *event)
{
m_lastPos = event->pos();
r = 1.0f;
g = 0.0f;
b = 0.0f;
a = 1.0f;
update();
}
void GLWidget::paintGL()
{
glClearColor(r, g, b, a);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
相关文章:
- C++中的memset函数工作不正常
- 通用线程池类工作不正常
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- "lambda capture"正常功能?
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 名为DLL的C++windows服务程序工作不正常
- C++-循环中的If语句工作不正常
- While循环和if/else语句工作不正常
- 定义支持/不支持功能的HAS_XXX/NO_XXX
- Qthread ::更改系统时间时睡眠不正常
- 阵列中的元素不正常地变化
- C++:最大数组值函数工作不正常
- 不允许功能模板的部分专业化背后的理由是什么?
- 套接字连接在主功能内部但不在功能内部
- 为什么在传递lambda而不是功能指针时不能推断模板参数
- 如何使用“自动”参数而不是功能过载
- 中断功能调用与正常功能
- 列表迭代器功能不正常
- Qt QOpenGLWidget glClearColor功能不正常
- Qt:鼠标移动功能不正常