Estoy intentando mostrar HUD sobre mi juego 3D. Para empezar, solo intento mostrar "Hello World", pero aún no he tenido éxito. La escena se congela/parpadea una vez que he terminado.2d HUD no dibujando correctamente sobre QGLWidget (usando QPainter)
Estoy usando Qt/C++ y QGLWdiget/QPainter para hacer esto. He utilizado overpainting example como referencia para comenzar. Aquí es lo que hago:
- paintEvent anulación (...) en mi propia subclase GameGL Clase (GameGL: QGLWidget pública)
- empuje matriz de OpenGL modelview como la matriz actual
- permiten parámetros como gl_depth_test
- hacer mi juego (:: paintGL1())
- desactivar los parámetros modelview
matriz modelview pop
Make objeto QPainter
- invocar paint.drawText()
- Flush usando paint.end()
Esto es prácticamente la misma como se ha mencionado en el ejemplo. Sin embargo, cuando ejecuto este código, experimenta congelación/parpadeo y es muy poco receptivo. ¿Alguien tiene alguna idea de por qué esto podría estar pasando? Realmente apreciaría cualquier ayuda.
Código: 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();
Gracias
¿Puede echar un vistazo a [este hilo] (http://stackoverflow.com/q/8446437/176769)? – karlphillip