在我使用Visual Studio在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();
}
发布于 2011-04-26 20:26:04
在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-27 04:14:11
一般情况下,使用线条并不是最好的主意,(您应该使用带纹理的三角形/矩形。)但您的问题可能是由标准定义的位于片段“中心”之间的行引起的。假设您使用的是1:1正交投影,则可以通过将坐标移动0.5来缓解(如果不是完全修复)该问题。
https://stackoverflow.com/questions/5794646
复制相似问题