gpt4 book ai didi

c++ - 2d HUD 无法在 QGLWidget 上正确绘制(使用 QPainter)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:21 24 4
gpt4 key购买 nike

我正在尝试在我的 3D 游戏中显示 HUD。对于初学者来说,我只是想显示“Hello World”,但我还没有成功!一旦我完成,场景就会卡住/闪烁。

我正在使用 Qt/C++ 和 QGLWdiget/QPainter 来完成这项工作。我用过overpainting example作为我入门的引用。这是我所做的:

  • 在我自己的子类 GameGL 类(GameGL : public QGLWidget)中覆盖 paintEvent(...)
  • 推送openGL ModelView矩阵作为当前矩阵
  • 启用参数作为 gl_depth_test
  • 渲染我的游戏 (::paintGL1() )
  • 禁用模型 View 参数
  • 弹出模型 View 矩阵

  • 制作QPainter对象

  • 调用 paint.drawText()
  • 使用 paint.end() 刷新

这与示例中提到的几乎相同。但是,当我运行此代码时,它会出现卡住/闪烁并且高度无响应。有人知道为什么会这样吗?我真的很感激任何帮助。


代码: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();

谢谢

最佳答案

对于仍在为此苦苦挣扎并看到这篇文章的任何人:这是我解决它的方法::

请按原样按照覆盖示例进行操作。如果您查看示例中的代码,您会注意到在构造函数中,一个计时器 timeout() SIGNAL 连接到 animate() SLOT。如果您仔细观察 animate() 插槽,它会依次调用 update() a.k.a GLWidget::update()。如果您遵循 GLWidget::update() 的文档;这又会调用 paintEvent(...)

这个背景很重要,是解决我的问题所缺少的部分。我之前使用 paintGL(...) 来绘制我的场景,因为我已经覆盖了 GLWidget。为了支持动画或场景更新,我将计时器连接到 updateGL()。这反过来又通过 glDraw() 调用了 paintGL()。这是所有问题的根本原因。

我编写的代码一次又一次地调用 paintGL()。在重绘示例之后,我完全摆脱了 paintGL 方法,转而使用 paintEvent(...) 渲染方法。因此,为了保持同步,我不得不调用 update() (而不是 updateGL() )来使事情正常进行。在我进行此转换的那一刻,事情开始按预期进行。 (GLWidget::update() 调用 paintEvent(...) )

希望对您有所帮助。如果它仍然不适合您或需要进一步解释,请在此处给我留言,我会尽力提供帮助。

关于c++ - 2d HUD 无法在 QGLWidget 上正确绘制(使用 QPainter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2861478/

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