[英]2d HUD not drawing properly over QGLWidget (using QPainter)
我试图在我的3D游戏上显示HUD。 首先,我只是想展示“Hello World”,但我还没有取得任何成功! 一旦完成,场景就会冻结/闪烁。
我正在使用Qt / C ++和QGLWdiget / QPainter来完成这项工作。 我已经使用了重绘示例作为我的入门参考。 这是我做的:
pop模型视图矩阵
制作QPainter对象
这与示例中提到的几乎相同。 但是,当我运行此代码时,它会遇到冻结/闪烁,并且高度无响应。 有人会知道为什么会发生这种情况吗? 我真的应该得到任何帮助。
代码:makeCurrent(); glMatrixMode(GL_MODELVIEW); glPushMatrix();
//Black background
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);//.50f, 1.0f );
//glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
//glEnable(GL_CULL_FACE);
glEnable(GL_LIGHTING);
m_pLight->SetupLight(GL_AMBIENT | GL_DIFFUSE | GL_SPECULAR);
glEnableClientState( GL_INDEX_ARRAY );
glEnableClientState( GL_VERTEX_ARRAY );
resizeGL( width(), height() );
paintGL1();
//glShadeModel(GL_FLAT);
glDisable(GL_DEPTH_TEST);
//glDisable(GL_CULL_FACE);
glDisable(GL_LIGHTING);
glDisableClientState( GL_INDEX_ARRAY );
glDisableClientState( GL_VERTEX_ARRAY );
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.drawText(100, 50, QString("Hello"));
painter.end();
谢谢
对于那些仍在努力解决这个问题并且遇到过这篇文章的人:这是我如何解决它::
请按原样按照重绘示例进行操作。 如果你查看示例中的代码,你会注意到在构造函数中,一个timer timeout()
SIGNAL连接到animate()
SLOT。 如果仔细观察animate()插槽,它会调用update()
aka GLWidget::update()
。 如果您遵循GLWidget :: update()的文档; 这又调用paintEvent(...)
。
这个背景很重要,是我问题的缺失部分。 因为我已经覆盖了GLWidget,所以我之前使用paintGL(...)来绘制我的场景。 为了支持我的场景的动画或更新,我已将计时器连接到updateGL()。 这反过来通过glDraw()调用paintGL()。 这是所有问题的根本原因。
我写的代码一次又一次地调用paintGL()。 在重绘示例之后,我完全摆脱了paintGL方法,转而使用paintEvent(...)渲染方法。 因此,为了保持同步,我不得不调用update()(而不是updateGL())来使事情有效。 在我完成这一过渡的那一刻,事情开始按预期工作了。 ( GLWidget::update()
调用paintEvent(...)
)
我希望它对你有所帮助。 如果它仍然不适合您或需要进一步解释,请在此留言,我会尽力帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.