在OpenGL中重塑窗口时居中对象

在OpenGL中重塑窗口时居中对象,opengl,Opengl,我正在编写一个简单的obj模型查看器。调整窗口大小时,如何使对象位于屏幕中心?当前,当我展开屏幕时,它会向右移动,当我缩小屏幕时,它会向左移动 有一个模型变换,中心对象位于(0,0,0)(cx,cy,cz是对象的中心) 在顶点着色器中: gl_Position = mvp * vec4(VertexPosition, 1.0); 重塑回调: void reshape(int w, int h) { height = h; width = w; // set viewp

我正在编写一个简单的obj模型查看器。调整窗口大小时,如何使对象位于屏幕中心?当前,当我展开屏幕时,它会向右移动,当我缩小屏幕时,它会向左移动

有一个模型变换,中心对象位于(0,0,0)(cx,cy,cz是对象的中心)

在顶点着色器中:

 gl_Position = mvp * vec4(VertexPosition, 1.0);
重塑回调:

void reshape(int w, int h)
{
    height = h;
    width = w;
    // set viewport to stretch the CVV to fit exactly in the display window
    glViewport(0, 0, w, h);

    glutPostRedisplay();
}

您可能希望在重塑函数中重新生成投影矩阵,因为查看
glm::mat4 proj=glm::perspective(glm::radians(40.0f)、float(width)/float(height)、ZNEAR、ZFAR)您可以看到,它采用了屏幕的宽度和高度,而屏幕的宽度和高度已经改变。这将解决一个问题,但我不确定它的全部。是的,宽度和高度是全局变量,所以它们是更新的。所以你称我提到的每一个渲染周期的那一行为?那我真的不确定问题出在哪里。您的显示器有其他代码吗?你使用FBO吗?是的,这可能是问题所在。我正在使用延迟着色,渲染为四元0,0,1,1。是的,您可能应该调整FBO大小,否则视口将比FBO大/小,这可能正是您描述的结果。
void reshape(int w, int h)
{
    height = h;
    width = w;
    // set viewport to stretch the CVV to fit exactly in the display window
    glViewport(0, 0, w, h);

    glutPostRedisplay();
}