我正在尝试在我的 3D 游戏上显示 HUD。对于初学者,我只是想显示“Hello World”,但我还没有成功!一旦我完成,场景就会冻结/闪烁。
我正在使用 Qt/C++ 和 QGLWdiget / QPainter 来完成这项工作。我已使用重绘示例作为开始的参考。这是我所做的:
- 在我自己的子类 GameGL 类( GameGL : public QGLWidget )中覆盖paintEvent(...)
- 将 openGL ModelView 矩阵推送为当前矩阵
- 启用参数作为 gl_depth_test
- 渲染我的游戏(::paintGL1())
- 禁用模型视图参数
弹出模型视图矩阵
制作 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();
谢谢