我试着修复一个窗口拉伸内容的问题,我完成了修复。但试用后,它只工作了一半。
下面是一些图片,下面是对问题的解释:
图像A:(应用程序启动时)
图像B:(在任意方向调整一次大小后)
当我启动应用程序时,它就像Image A,一个如预期的方形启动窗口,没有拉伸。
然后,如果我在任何方向上调整窗口大小,每次调整大小时,窗口都会越来越大,如图像B所示。
每次调整窗口大小时,resize函数都会运行,这要归功于main函数中的这一行:
glutReshapeFunc(resizeCallback);
下面是函数的代码,我认为这是导致此问题的原因:
void resizeCallback(int w, int h) {
glViewport(0, 0, w, h);
glMatrixMode( GL_PROJECTION );
const GLfloat aspectRatio = (GLfloat)w / (GLfloat)h;
gluOrtho2D(-aspectRatio, aspectRatio, -1.0f, 1.0f);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}
如果有人能帮我的话,我会很感激的。自从我上次在C++中使用OpenGL已经一年了,我从来没有解决过拉伸内容的问题。
1条答案
按热度按时间yquaqz181#
gluOrtho2D
不仅设置了投影矩阵,还定义了一个正投影矩阵,并将当前矩阵乘以新矩阵,需要在gluOrtho2D
之前加载Identity matrix和glLoadIdentity
: