Opengl glViewport问题-获取拉伸摄影机视图

Opengl glViewport问题-获取拉伸摄影机视图,opengl,Opengl,您好,我尝试在四个视口中分割一个窗口,在每个视口中渲染一个场景。 为简单起见,我已将代码简化为仅包含一个摄影机视图。 代码大致如下所示: void setup_trf(const PolarCoords& pc, double aspect) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60, aspect, 0.01, 1000); //glFrustum(-1.0, 1

您好,我尝试在四个视口中分割一个窗口,在每个视口中渲染一个场景。 为简单起见,我已将代码简化为仅包含一个摄影机视图。 代码大致如下所示:

void setup_trf(const PolarCoords& pc, double aspect)
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60, aspect, 0.01, 1000);
    //glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    double eye_x, eye_y, eye_z;
    pc.to_cartesian(eye_x, eye_y, eye_z);

    double look_x = 0;
    double look_y = 0;
    double look_z = 0;

    double up_x = 0;
    double up_y = 0;
    double up_z = 1;
    gluLookAt(
        eye_x, eye_y, eye_z,
        look_x, look_y, look_z,
        up_x, up_y, up_z);
}

void draw_scene(int w, int h) {
    glClearColor(0.0f, 0.75f, 1.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    double aspect = w / double(h);

    glViewport(0, h / 2, w / 2, h);
    setup_trf(app_state.m_polar, aspect);
    draw_sphere();

    glViewport(w / 2, h / 2, w, h);
    setup_trf(app_state.m_polar, aspect*0.5);
    draw_sphere();

    glViewport(0, 0, w / 2, h/2);
    setup_trf(app_state.m_polar, aspect);
    draw_sphere();

    glViewport(w / 2, 0, w, h / 2);
    setup_trf(app_state.m_polar, aspect);
    draw_sphere();
}
结果如下:


有人知道为什么图像会在不同的视口中拉伸吗?

的第一个和第二个参数是视口矩形的左下角坐标(原点)。但第3和第4个参数是视口矩形的宽度和高度,而不是右上角坐标

这意味着第三个和第四个参数必须是每种情况下窗口大小的一半(
w/2
h/2
):

glViewport(0,h/2,w/2,h/2);
设置trf(应用程序状态、极坐标、方向);
绘制球();
GLVIEW(w/2、h/2、w/2、h/2);
设置trf(应用程序状态、极坐标、方向);
绘制球();
GLVIEW(0、0、w/2、h/2);
设置trf(应用程序状态、极坐标、方向);
绘制球();
GLV视口(w/2、0、w/2、h/2);
设置trf(应用程序状态、极坐标、方向);
绘制球();

谢谢!我按照你说的修改了它,它可以工作:-)