3

当我的窗口调整大小时,我不希望内容缩放,而只是增加视口大小。我在stackoverflow(http://stackoverflow.com/questions/5894866/resize-viewport-crop-scene)上搜索时发现了这一点,这与我的问题几乎相同。但是我对将缩放设置到什么位置以及在哪里设置感到困惑,我用 1.0f 进行了尝试,但是什么也没显示:s

这是目前进行缩放的调整大小功能代码:

void GLRenderer::resize() {
    RECT rect;
    int width, height;
    GLfloat aspect;

    GetClientRect(hWnd, &rect);
    width = rect.right;
    height = rect.bottom;

    if (height == 0) {
        height = 1;
    }

    aspect = (GLfloat) width / height;

    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0, aspect, 0.1, 100.0);
    glMatrixMode(GL_MODELVIEW);
}

我的功能是渲染一个简单的三角形:

void GLRenderer::render() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();
    glTranslated(0, 0, -20);

    glBegin(GL_TRIANGLES);
        glColor3d(1, 0, 0);
        glVertex3d(0, 1, 0);
        glVertex3d(1, -1, 0);
        glVertex3d(-1, -1, 0);
    glEnd();

    SwapBuffers(hDC);
}
4

1 回答 1

2

您可以使用“视野”参数将 y(高度)的缩放更改为 gluPerspective。在您的代码中是 45 度的那个。由于当前始终为 45 度,因此您将始终获得相同的视角(以 y 为单位)。如何将这个值作为窗口高度的函数来改变并不明显。对于较大的值(180 度及以上),线性关系将失败。我会尝试使用 arctan(height/k),其中“k”类似于 500。

另请注意,当您在 x 中扩展窗口时,您已经得到了您想要的(您的源代码当前的方式)。也就是说,您可以获得更广阔的视野。那是因为您将方面(第二个参数)更改为取决于 x 和 y 之间的比率的值。

高度和宽度以像素为单位,因此值为 1 不好。

请注意,您使用的是已弃用的旧版 OpenGL。有关详细信息,请参阅旧版 OpenGL

于 2012-09-14T11:36:19.043 回答