2

在我使用 Visual Studio 在 Windows 7 上开发的这个 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

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 回答
1

通常使用线条不是最好的主意,(您应该使用带纹理的三角形/矩形。)但是您的问题可能是由标准定义的片段“中心”之间的线条引起的。假设您使用的是 1:1 正交投影,您可以通过将坐标移动 0.5 来缓解(如果不能完全解决)问题。

于 2011-04-27T04:14:10.983 回答