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