gpt4 book ai didi

Qt & OpenGL - QGLWidget & QPainter : depth buffering

转载 作者:行者123 更新时间:2023-12-04 12:24:24 27 4
gpt4 key购买 nike

我子类化 QGLWidget 并将我的绘画代码放在paintEvent而不是paintGL中,因为我想使用QPainter在我使用OpenGL完成的3D内容上绘制2D叠加层。

当我没有覆盖时,我的深度缓冲工作正常。如果覆盖层被绘制,我的深度缓冲区就会停止工作:我可以看到应该被前面的对象隐藏的东西。

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();

根据 if,相同的场景看起来好(覆盖关闭)或错误(覆盖打开)。除了奇怪的深度缓冲问题之外,它运行得非常好。

我的(疯狂的)猜测是 QPainter 的构造禁用了深度缓冲。任何提示将不胜感激。我想一个后备解决方案是将我的叠加层渲染成纹理并让 OpenGL 将其混合。

最佳答案

为什么不根据需要启用和禁用深度测试?你没有“初始化”OpenGL,它是一个状态机。那些“初始化”语句属于您的绘图代码,属于需要它们的上下文。

关于Qt & OpenGL - QGLWidget & QPainter : depth buffering,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6709254/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com