为什么多边形平滑会产生虚线?

Why does polygon smoothing produce a broken line?

在 OpenGL 中使用多边形平滑时,我的多边形内部出现一些虚线,如图所示:

我的代码如下所示:

glEnable(GL_POLYGON_SMOOTH)
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST)

glPolygonMode(GL_FRONT, GL_FILL)
glPolygonMode(GL_BACK, GL_LINE)
glLineWidth(5)
glBegin(GL_QUADS)
glVertex3f(0.1, 0.1, 0)
glVertex3f(0.2, 0.1, 0)
glVertex3f(0.2, 0.2, 0)
glVertex3f(0.1, 0.2, 0)

glEnd()
glDisable(GL_POLYGON_SMOOTH)

为什么会发生这种情况,我该如何解决?

绘制四边形或多边形通常是在现代硬件上通过绘制多个三角形来模拟的。当平滑这些三角形的边界时,将四边形分成两个三角形的对角线也会被平滑,从而产生这种伪像。

您正在使用的 OpenGL API(固定功能管道)现已弃用十年,不应再使用。尤其是 "special features",例如多边形平滑或绘制多边形,在不同的硬件上可能表现得非常不同。

现代 OpenGL(3.3+ 核心配置文件)的工作方式完全不同,并带有一组更好的方法来处理抗锯齿,例如 MSAA or post processing (FXAA, ...)

我认为你的混合模式有问题。对于多边形平滑,有特殊的源混合模式 GL_SRC_ALPHA_SATURATE

所以试试glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE)