opengl 调整大小会使窗口内容在每次循环时变细

kcugc4gi  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(83)

我试着修复一个窗口拉伸内容的问题,我完成了修复。但试用后,它只工作了一半。
下面是一些图片,下面是对问题的解释:

图像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已经一年了,我从来没有解决过拉伸内容的问题。

yquaqz18

yquaqz181#

gluOrtho2D不仅设置了投影矩阵,还定义了一个正投影矩阵,并将当前矩阵乘以新矩阵,需要在gluOrtho2D之前加载Identity matrixglLoadIdentity

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
const GLfloat aspectRatio = (GLfloat)w / (GLfloat)h;
gluOrtho2D(-aspectRatio, aspectRatio, -1.0f, 1.0f);

相关问题