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

"field of view" パラメータを gluPerspective にすると、ズームイン y (高さ) を変更できます。コードで 45 度のもの。現在は常に 45 度であるため、常に同じビュー角度 (y 単位) が得られます。ウィンドウの高さの関数としてこの値を変更する方法は明らかではありません。大きな値 (180 度以上) の場合、線形関係は失敗します。「k」は500のようなものです。

x でウィンドウを拡張すると、既に必要なものが得られることにも注意してください (現在のソース コードの状態)。つまり、より広い視野が得られます。これは、アスペクト (第 2 引数) を x と y の比率に応じた値に変更するためです。

高さと幅はピクセル単位で測定されるため、値 1 は適切ではありません。

非推奨のレガシー OpenGL を使用していることに注意してください。詳細については、レガシー OpenGLを参照してください。

于 2012-09-14T11:36:19.043 に答える