5
我繼承了QGLWidget,並在paintEvent中繪製代碼,而不是paintGL,因爲我想用QPainter繪製2D覆蓋圖,並使用OpenGL完成3D模型。Qt&OpenGL - QGLWidget&QPainter:深度緩衝
當我沒有覆蓋層時,我的深度緩衝工作正常。如果疊加層被繪製,我的深度緩衝區變爲AWOL:我可以看到應該被前面的對象隱藏的東西。
initializeGL看起來是這樣的:
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();
取決於如果在同一場景看起來好嗎(覆蓋關閉)或錯誤(覆蓋)。除了奇怪的深度緩衝區問題之外,它工作得非常好。
我的(瘋狂)猜測是QPainter的構造禁用深度緩衝。任何提示將不勝感激。我想一個後備解決方案將渲染我的覆蓋到一個紋理,並讓OpenGL融入其中。
我加了glEnable(GL_DEPTH_TEST);頂部和glDisable(GL_DEPTH_TEST); OpenGL和QPainter之間的東西 - 和yike,它的工作原理!謝謝一堆。 – user816098