OpenGL GL_POLYGON_SMOOTH 2D反锯齿如何将四边形创建三角形?

6

更新:

我发现当我安装NVIDIA控制面板时会出现这种情况,如果我卸载它,它就可以正常工作。

在OpenGL中旋转四边形时,边缘变得锯齿状。

如果我调用glEnable(GL_POLYGON_SMOOTH),边缘就会变得平滑,但是OpenGL会在所有图像上绘制一条白色对角线,好像它正在将我的四边形创建为三角形。

它看起来像这样: GL_POLYGON_SMOOTH

有没有办法禁用那条线,或者可以以其他简单的方式获得抗锯齿效果? 我尝试了GL_MULTISAMPLE,但什么也没发生。

在我的代码中,我还有:

glShadeModel(GL_SMOOTH);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glDisable(GL_DEPTH_TEST);

glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

3
两个三角形的顶点似乎没有对齐,因此出现了这条细线。尝试画一个三角形扇形而不是四边形。在我看来,这条线应该消失了,因为OpenGL知道哪些顶点是共享的(完全相等)。 - Ani
你在不同的电脑上测试过吗?使用了不同的显卡和驱动程序进行测试了吗?我认为这可能是驱动程序的问题。 - Jerry Coffin
看起来你的混合函数有问题。你尝试过 http://www.opengl.org/sdk/docs/man/xhtml/glBlendFunc.xml 上的其他选项了吗?具体来说,像 glBlendFunc(GL_SRC_ALPHA_SATURATE,GL_ONE) 这样的选项呢? - Kyle
@Jerry Coffin,好主意,我在我的笔记本上测试了一下,白线消失了。 我已经下载了三个不同的驱动程序,285.62、295.51和295.53,但没有任何区别。我使用460SLI,并尝试逐个禁用它们,但仍然无法解决问题。您有什么建议可以尝试修复这个问题吗? 谢谢, - Orujimaru
@Jerry Coffin:抱歉,是的,那些是Windows的Nvidia驅動程式。285是最新的穩定版本,而295則是更近期的測試版。我會聯繫Nvidia。非常感謝您的幫助!//Markus - Orujimaru
显示剩余2条评论
1个回答

3

好的,我会将其作为答案编写,尝试后请告诉我是否有效。

GL_TRIANGLE_FAN:如果应用程序指定了顶点v的序列,则OpenGL使用v 0、v 1和v 2渲染一个三角形;使用v 0、v 2和v 3渲染另一个三角形;使用v 0、v 3和v 4渲染另一个三角形,依此类推。如果应用程序指定了n个顶点,则OpenGL渲染n-2个相连的三角形。

因此,要绘制一个以原点为中心的单位正方形,

glBegin(GL_TRIANGLE_FAN);

glTexCoord2f(0f, 0f);
glVertex3f(-halfWidth, -halfHeight, 0f);

glTexCoord2f(0f, 1f);
glVertex3f(-halfWidth, halfHeight, 0f);

glTexCoord2f(1f, 1f);
glVertex3f(halfWidth, halfHeight, 0f);

glTexCoord2f(1f, 0f);
glVertex3f(halfWidth, -halfHeight, 0f);

glEnd();

现在,您可以在此周围使用与四边形相同的转换!希望这有所帮助!

抱歉,但这与绘制四边形的输出完全相同。 感谢你的努力。// Markus - Orujimaru
此时我开始怀疑驱动程序和/或GPU,正如@jerrycoffin上面所说。尝试在其他GPU/驱动程序上运行它。 - Ani
是的,我相当确定就是这样。这真的很奇怪。 自从18个月前购买以来,我从未遇到过任何GPU问题。我尝试了几个不同的驱动程序,但没有帮助。我尝试逐个禁用一个GPU,但也没有帮助。我不知道如何排除GPU本身的故障。如果只是我的电脑有问题,我可以忍受,但由于我希望发布正在开发中的游戏,如果这种情况经常发生,那就无法接受了 =/ - Orujimaru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接