Próbuję wyświetlić HUD w mojej grze 3D. Na początek próbuję wyświetlić "Hello World", ale jeszcze nie osiągnąłem sukcesu! Scena zamarza/miga, gdy skończę.2d Nie poprawnie rysowanie HUD przez QGLWidget (przy użyciu QPaintera)
Używam Qt/C++ i QGLWdiget/QPainter, aby to zrobić. Użyłem overpainting example jako mojego odniesienia, aby zacząć. Oto co mam zrobić:
- override paintEvent (...) W moim podklasy GameGL klasa (GameGL: QGLWidget publiczny)
- push openGL ModelView macierz jako bieżącej macierzy
- umożliwić parametrów jak gl_depth_test
- czynią moją grę (:: paintGL1())
- wyłączyć parametry ModelView
matryca pop ModelView
Producent obiekt QPainter
- powołać paint.drawText()
- Flush używając paint.end()
Jest niemal tak samo, jak wspomniano w przykładzie. Jednak po uruchomieniu tego kodu, odczuwa on mrozy/migotanie i jest wysoce niereagujący. Czy ktokolwiek miałby pojęcie, dlaczego tak się dzieje? Naprawdę doceniam każdą pomoc.
Kod: 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();
Dziękuję
Czy możesz rzucić okiem na [ten wątek] (http://stackoverflow.com/q/8446437/176769)? – karlphillip