在撰写这个问题之前,我已经阅读了这个问题:Handling window resizing using OpenGL and SDL。然而,那个问题并不能解决我的问题,因为我使用的是SDL2而不是SDL1.2。但我确实使用OpenGL2。我的完整源代码可在此处找到:http://dpaste.com/17BVBP6
我正在编写一个程序,在窗口中显示一个白色正方形。但是,我在处理窗口大小调整事件时遇到了麻烦。以下是我的调整函数:
这是我的窗口,当它未被调整大小时:
这是我的窗口,当它被调整大小时:
这里的问题是什么原因导致的?
void resize(int width,int height)
{
if(height<=0) height=1;
glViewport(0,0,(GLsizei)width,(GLsizei)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f,float(width)/float(height),1.0f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
我的主事件循环:
while( !quit )
{
while( SDL_PollEvent( &e ) != 0 )
{
switch (e.type) {
case SDL_QUIT:
quit=true;
break;
case SDL_WINDOWEVENT_SIZE_CHANGED:
resize(e.window.data1,e.window.data2);
break;
case SDL_KEYDOWN:
switch (e.key.keysym.sym) {
case SDLK_ESCAPE:
quit=true;
break;
default:
break;
}
default:
break;
}
}
render();
update(gWindow);
}
这是我的窗口,当它未被调整大小时:
![未调整大小时渲染正确](https://istack.dev59.com/Zm59H.webp)
![调整大小后渲染不正确](https://istack.dev59.com/qf0Z4.webp)