我正在开发一些软件来连续显示半透明图像。
使用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);
}
答案 0 :(得分:0)
好的,注意到这必须与深度缓冲区有关(gluPerspective手册指出深度缓冲区精度受zNear和zFar值的影响:https://www.opengl.org/sdk/docs/man2/xhtml/gluPerspective.xml) 我禁用了GL_DEPTH_TEST(未注释的glEnable(GL_DEPTH_TEST)),一切似乎都按预期工作。但我不完全理解为什么。
问题解决了,新的谜团实现了。