2

VisualStudioを使用してWindows7で開発しているこのOpenGLアプリケーションで、NVIDIAコントロールパネルでアンチエイリアシングを有効にしようとしました(アプリケーション.exeの場合のみ)。

これを有効にすると、正投影で描画された線/クワッドに少し歪みが生じます。

アンチエイリアシングは左側でオフになり、右側でオンになります。

アンチエイリアシングの問題

アンチエイリアシングをオンにしたまま、これをどのように修正できますか?

関連する場合は、正投影の設定方法と黒の境界線の描画方法を次に示します。

void drawHeadsUpDisplay(void) {
    static int winWidth, winHeight;

    winWidth = glutGet(GLUT_WINDOW_WIDTH);
    winHeight = glutGet(GLUT_WINDOW_HEIGHT);
    glPushAttrib(GL_ENABLE_BIT);
    glDisable(GL_DEPTH_TEST);
    glDisable(GL_LIGHTING);

    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    gluOrtho2D(0.0f, winWidth, winHeight, 0.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glBegin(GL_LINE_LOOP);
        glColor3f(0.0f, 0.0f, 0.0f);
        glVertex2f(winWidth - 41, 48);
        glVertex2f(winWidth - 41, winHeight - 48);
        glVertex2f(winWidth - 18, winHeight - 48);
        glVertex2f(winWidth - 18, 48);
    glEnd();

    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);

    glPopAttrib();
}
4

2 に答える 2

1

一般に線を使用するのは最善の方法ではありませんが(代わりにテクスチャの三角形/長方形を使用する必要があります)、問題はおそらく、標準で定義されているフラグメントの「中心」の間にある線が原因である可能性があります。1:1の正投影を使用していると仮定すると、座標を0.5シフトすることで、おそらく問題を軽減できます(完全に修正されていない場合)。

于 2011-04-27T04:14:10.983 に答える
1

y方向に48と49があります。アンチエイリアシングを有効にしないと、投影による整数の丸めが違いを隠しますが、アンチエイリアシングを有効にすると、傾きが表示されます。に変更するだけ

glBegin(GL_LINE_LOOP);
    glColor3f(0.0f, 0.0f, 0.0f);
    glVertex2f(winWidth - 41, 49);
    glVertex2f(winWidth - 41, winHeight - 49);
    glVertex2f(winWidth - 18, winHeight - 49);
    glVertex2f(winWidth - 18, 49);
glEnd();

(またはどこでも48)

于 2011-04-26T20:26:03.520 に答える