QGLWidgetをサブクラス化し、paintGLの代わりにpaintEventに自分のペイントコードを持っていますので、QPainterを使用して2DオーバーレイをOpenGLで3Dペイントします。Qt&OpenGL - QGLWidget&QPainter:深度バッファリング
オーバレイがないと、深度バッファリングが正常に機能します。オーバーレイがペイントされている場合、私のデプスバッファーはAWOLになります。オブジェクトの前に隠れるべきものを見ることができます。
qglClearColor(Qt::black);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
次のように私のpaintEventコードの構造は次のとおりです:
makeCurrent();
...openGLStuff...
if (I need my overlay)
{
glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
QPainter painter(this);
... do QPainter stuff ...
glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
}
swapBuffers();
、同じシーンが大丈夫に見える場合(オフオーバーレイ)に応じて、または間違った(
initializeGLは次のようになりますオーバーレイをオンにする)。奇妙な奥行きバッファの問題とは別に、完全にうまく動作します。
私の(野生の)推測は、QPainterの構築が深度バッファリングを無効にするということです。どんなヒントも非常に高く評価されます。私は、テクスチャにオーバーレイをレンダリングし、OpenGLでそれをブレンドする代替ソリューションがあると思います。
glEnable(GL_DEPTH_TEST)を追加しました。一番上にあり、glDisable(GL_DEPTH_TEST); OpenGLとQPainterの間のやりとり、それはうまく動作します!本当にありがとう。 – user816098