可以重写resizeGL函数,并在其中根据窗口的大小重新生成投影矩阵,如:
//OpenGLWidget继承QOpenGLWidget和QOpenGLFunctions_4_0_Core
void OpenGLWidget::resizeGL(int width, int height)
{
glViewport(0, 0, width, height);
QMatrix4x4 matrix;
float left = - width() / 2.0f;
float right = width() / 2.0f;
float bottom = - height() / 2.0f;
float up = height() / 2.0f;
float nearPlane = 0.1f;
float farPlane = 20000.0f;
matrix.ortho(left, right, bottom, up, nearPlane, farPlane);
projectionMatrix = matrix;
//shaderProgram是QOpenGLShaderProgram的实例,“projectionMatrix”是glsl顶点着色器中的投影矩阵
shaderProgram->setUniformValue("projectionMatrix", projectionMatrix);
}
窗口移动前:
窗口移动后: