3D ゲームに HUD を表示しようとしています。手始めに、「Hello World」を表示しようとしていますが、まだ成功していません! 作業が完了すると、シーンがフリーズ/ちらつきます。
これを行うために Qt/C++ と QGLWdiget / QPainter を使用しています。開始するための参照として、オーバーペイントの例を使用しました。これが私がすることです:
- 自分のサブクラス化された GameGL クラス ( GameGL : public QGLWidget ) で paintEvent(...) をオーバーライドします。
- openGL ModelView マトリックスを現在のマトリックスとしてプッシュする
- パラメータを gl_depth_test として有効にする
- ゲームをレンダリングする (:: paintGL1() )
- モデルビュー パラメータを無効にする
pop モデルビュー マトリックス
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();
ありがとうございました