调整窗口

时间:2016-01-07 09:18:25

标签: qt opengl resize qglwidget clutter

我正在开发一些软件来连续显示半透明图像。

使用glut函数进行大小调整等工作正常但后来我决定转移到Qt进行GUI。

所有glut函数都被剥离,我使用QGLWidget来渲染我的OpenGL内容。

当我打开程序时,一切都按预期工作,但只要我调整主窗口的大小(因此调整了QGLWidget),我的openGL小部件的内容就会消失或显得混乱。

奇怪的是,当我的场景内容没有杂乱的渲染时,小部件是完全灰色的(我的glclearcolor)。

它应该是这样的(在启动程序之后): http://abload.de/img/okw0qh0.png

这是调整主窗口大小后的样子: http://abload.de/img/errort1peu.png (有时它只是灰色)

我的resizeGL函数看起来像这样,并被正确调用:

void prosta3dwidget::resizeGL(int width, int height)
{
if (height == 0) return;                // To prevent divide by 0
    GLfloat aspect = (GLfloat)width / (GLfloat)height; //get aspect ratio

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity();          
    gluPerspective(45.0f, aspect, 0.5f, 100.0f);

    glViewport(0, 0, width, height);
    update(); //redraw content

glMatrixMode(GL_MODELVIEW);
}

1 个答案:

答案 0 :(得分:0)

好的,注意到这必须与深度缓冲区有关(gluPerspective手册指出深度缓冲区精度受zNear和zFar值的影响:https://www.opengl.org/sdk/docs/man2/xhtml/gluPerspective.xml) 我禁用了GL_DEPTH_TEST(未注释的glEnable(GL_DEPTH_TEST)),一切似乎都按预期工作。但我不完全理解为什么。

问题解决了,新的谜团实现了。