我想在我的3D游戏上显示HUD。对于初学者,我只是想展示“Hello World”,但我还没有取得任何成功!一旦我完成,场景就会冻结/闪烁。2d HUD不能正确绘制QGLWidget(使用QPainter)
我正在使用Qt/C++和QGLWdiget/QPainter来完成这项工作。我已经使用overpainting example作为我的参考开始。这是我做的:在我自己的子类GameGL类
- 覆盖的paintEvent(...)(GameGL:公共QGLWidget来绘图)
- 推openGL的模型视图矩阵作为当前矩阵
- 使参数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();
谢谢
你可以请看看[这个线程](http://stackoverflow.com/q/8446437/176769)? – karlphillip 2011-12-09 16:47:46