Я пытаюсь отобразить HUD над своей 3D-игрой. Для начала, я просто пытаюсь отобразить «Hello World», но я еще не добился успеха! Когда я закончил, сцена замораживается/мерцает.2d HUD не правильно рисует QGLWidget (используя QPainter)
Я использую Qt/C++ и QGLWdiget/QPainter, чтобы это сделать. Я использовал overpainting example в качестве ссылки для начала. Вот что я делаю:
- переопределение paintEvent (...) в моем собственном подклассах GameGL класса (GameGL: общественный QGLWidget)
- принудительного OPENGL видовой матрица в качестве текущей матрицы
- включить параметры, как gl_depth_test
- делают свою игру (:: paintGL1())
- отключить с использованием параметров видовую
поп-матрица вида модели
Сделать объект QPainter
- вызывать paint.drawText()
- Flush с помощью 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