qt opengl 窗口变化时物体大小保持不变
可以重写resizeGL函数,并在其中根据窗口的大小重新生成投影矩阵,如:
//OpenGLWidget继承QOpenGLWidget和QOpenGLFunctions_4_0_Core
voidOpenGLWidget::resizeGL(intwidth,intheight){glViewport(0,0,width,height);QMatrix4x4matrix;floatleft=-width()/2.0f;floatright=width()/2.0f;floatbottom=-height()/2.0f;floatup=height()/2.0f;floatnearPlane=0.1f;floatfarPlane=20000.0f;matrix.ortho(left,right,bottom,up,nearPlane,farPlane);projectionMatrix=matrix;//shaderProgram是QOpenGLShaderProgram的实例,“projectionMatrix”是glsl顶点着色器中的投影矩阵
shaderProgram->setUniformValue("projectionMatrix",projectionMatrix);}窗口移动前:
窗口移动后: