3

フルスクリーンモードで問題が発生しました。ウィンドウを800x600に設定できますが、その解像度を全画面表示すると拡大します。これはアスペクト比の変化によるものだと思います。どうすればこれを修正できますか?

編集#1

これが私が起こっていることのスクリーンショットです。

画像

左:800x600

右:1366x768

編集#2

ウィンドウのサイズを変更するたびに(WM_SIZE)、initGraphics関数が呼び出されます。

void initGraphics(int width, int height) {
    float aspect = (float)width / (float)height;
    glViewport(0, 0, width, height);
    glEnable(GL_TEXTURE_2D);
    glEnable(GL_BLEND); //Enable alpha blending
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0, width, height * aspect, 0.0);
    glMatrixMode(GL_MODELVIEW);
}
4

2 に答える 2

5

解決策: 本当の問題は、gluOrtho2D関数を誤用していたことです。これを使用する代わりに:

gluOrtho2D(0.0, width, height * aspect, 0.0);

これを正しい形式に切り替える必要がありました:

gluOrtho2D(0.0, width, 0.0, height);

後者は、ビューポートの幅と高さ全体を埋める2D正投影を作成するため、ストレッチは発生しません。

元の回答:

新しいアスペクト比を考慮するために、投影を変更する必要があります。

まずglViewport、新しいウィンドウサイズに設定していることを確認してください。ビューポートを設定したら、を呼び出してマトリックスモードを投影に切り替え、glMatrixMode最後にを使用して新しいアスペクト比を計算し、に新しいアスペクト比をwidth / height渡す必要がありgluPerspectiveます。ソースを見つけるglFrustum代わりにストレートを使用して、で同じ効果を達成することもできます。gluPerspectivegluPerspectiveglFrustum

このようなもの:

    float aspectRatio = width / height;
    glMatrixMode(GL_PROJECTION_MATRIX);
    glLoadIdentity();
    gluPerspective(fov, aspectRatio, near, far); 
于 2012-06-05T05:28:42.470 に答える
3

ウィンドウのサイズを変更した後、新しいアスペクト比を反映するように投影行列を調整する必要があります。従来のOpenGLを使用している場合は、マトリックスモードをGL_PROJECTIONに切り替え、単位行列をロードしてから、縦横比でスケーリングされた垂直方向の寸法でglOrthoまたはgluPerspectiveを呼び出します(画像の水平方向の広がりをそれと同じにしたい場合)元のウィンドウでした)。

于 2012-06-05T05:32:04.453 に答える