Я пытаюсь отобразить HUD поверх моей 3D-игры. Для начала я просто пытаюсь отобразить «Hello World», но пока безуспешно! Сцена зависает / мерцает, как только я закончу.
Я использую Qt/C++ и QGLWdiget/QPainter, чтобы сделать это. Я использовал пример перерисовки в качестве примера для начала работы. Вот что я делаю:
- переопределить paintEvent(...) в моем собственном подклассе класса GameGL ( GameGL : public QGLWidget )
- Вставьте матрицу 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();
Спасибо