Sto provando a visualizzare l'HUD sul mio gioco 3D. Per cominciare, sto solo cercando di visualizzare "Hello World", ma non ho ancora avuto alcun successo! La scena si blocca/sfarfalla una volta che ho finito.2d HUD che non si disegnano correttamente su QGLWidget (usando QPainter)
Sto usando Qt/C++ e QGLWdiget/QPainter per fare questo. Ho usato overpainting example come riferimento per iniziare. Ecco quello che faccio:
- Override paintEvent (...) nel mio sottoclasse GameGL Classe (GameGL: QGLWidget pubblico)
- push matrice openGL modelview come la matrice corrente
- consentono parametri come GL_DEPTH_TEST
- rendere il mio gioco (:: paintGL1())
- disabilitare i parametri modelview
matrice pop modelview
Marchio oggetto QPainter
- richiamare paint.drawText()
- Flush utilizzando paint.end()
Questo è più o meno lo stesso, come indicato nell'esempio. Tuttavia, quando eseguo questo codice, si verifica il congelamento/sfarfallio ed è altamente non reattivo. Qualcuno avrebbe qualche idea sul perché questo potrebbe accadere? Mi piacerebbe davvero avere qualche aiuto.
Codice: 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();
Grazie
Potete per favore dare un'occhiata a [questo thread] (http://stackoverflow.com/q/8446437/176769)? – karlphillip