use*_*098 7 opengl qt overlay qpainter qglwidget
我将QGLWidget子类化,并将我的绘画代码放在paintEvent而不是paintGL中,因为我想使用QPainter在我用OpenGL完成的3D内容上绘制2D叠加层.
当我没有叠加时,我的深度缓冲工作正常.如果覆盖图被绘制,我的深度缓冲区就会变为AWOL:我可以看到应该被前面的对象隐藏的东西.
initializeGL看起来像这样:
qglClearColor(Qt::black);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
Run Code Online (Sandbox Code Playgroud)
我的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();
Run Code Online (Sandbox Code Playgroud)
根据if,相同的场景看起来没问题(叠加)或错误(叠加).除了奇怪的深度缓冲问题,它的效果非常好.
我的(狂野)猜测是QPainter的构造禁用了深度缓冲.任何暗示都将非常感激.我想一个后备解决方案是将我的叠加层渲染到纹理中并让OpenGL混合它.
| 归档时间: |
|
| 查看次数: |
2081 次 |
| 最近记录: |