Включение сглаживания в панели управления NVIDIA приводит к искажению линий в ортографической проекции - PullRequest
2 голосов
/ 26 апреля 2011

В этом приложении OpenGL, которое я разрабатываю для Windows 7 с помощью Visual Studio, я попытался включить сглаживание на панели управления NVIDIA (только для приложения .exe).

Включение, которое вызываетнебольшое искажение в линиях / квадратах, нарисованных в ортографической проекции.

Сглаживание отключено слева и включено справа:

anti-aliasing issue

Как это можно исправить, сохранив сглаживание?

В случае необходимости, вот как настроена ортографическая проекция и как рисуется черная граница:

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();
}

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Использование линий в общем случае не лучшая идея (вместо этого следует использовать текстурированные треугольники / линии), но ваша проблема, вероятно, вызвана линиями, попадающими между «центрами» фрагмента, как определено стандартом. Вероятно, вы можете облегчить (если не полностью устранить) проблему, сместив координаты на 0,5, предполагая, что вы используете ортографическую проекцию 1: 1.

1 голос
/ 27 апреля 2011

У вас там 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 везде)

...