OpenGL 抗锯齿不起作用

Posted

技术标签:

【中文标题】OpenGL 抗锯齿不起作用【英文标题】:OpenGL antialiasing isn't working 【发布时间】:2009-12-29 17:22:21 【问题描述】:

我使用以下代码仅对多边形的边缘进行抗锯齿处理:

glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
glEnable(GL_POLYGON_SMOOTH);

但它不起作用。

我可以通过 nvidia 控制面板强制启用抗锯齿功能,它会对我的应用程序多边形进行抗锯齿处理。使用上面的代码,我什至启用了混合,但它没有效果。另外渲染代码不应该改变,因为nvidia控制面板可以打开它,它当然不能修改我的渲染代码,它必须是一些开/关标志。这是什么?

我听说过“多重采样”,但我不需要。

编辑:nvidia 控制面板设置在不起作用时为“应用程序控制”。

【问题讨论】:

您是否将 nVidia 控制面板中的“抗锯齿设置”设置为“应用程序控制”? 您是否使用多重采样创建渲染上下文?这就是 nvidia 控制面板的变化。 这取决于您的窗口系统/框架,通常有一个“样本”值,您可以在某处设置为 4 或 8。在 Windows 中,它进入像素格式结构。 【参考方案1】:

您需要请求支持多重采样的视觉/像素格式。这是使用 GLX/XLib 时传递给 glXChooseFBConfig 和使用 Win32 API 时传递给 wglChoosePixelformatARB 的属性列表中的一个属性。在这里查看我的帖子:Getting smooth, big points in OpenGL

【讨论】:

【参考方案2】:

您的glEnable 呼叫可能在glHint 呼叫之后。

【讨论】:

有趣的是,我无法用我的任何代码复制您所看到的内容。我有预感 NVidia 控制面板不是你的朋友。【参考方案3】:

尝试启用混合

glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE);
glEnable(GL_BLEND);
glEnable(GL_POLYGON_SMOOTH);

以下文章也可能有所帮助

http://www.edm2.com/0603/opengl.html

【讨论】:

【参考方案4】:

很可能,您的硬件不支持它。并非所有 OpenGL 实现都支持抗锯齿多边形;见OpenGL FAQ。我之前在第一代 MacBook 上肯定遇到过这个问题——它的 GPU 英特尔 GMA 950 不支持抗锯齿多边形。

【讨论】:

geforce 8800GTS 应该支持

以上是关于OpenGL 抗锯齿不起作用的主要内容,如果未能解决你的问题,请参考以下文章

openGL线型和线宽以及线的抗锯齿

在 OpenGL ES 2.0 中渲染到纹理时的抗锯齿

在 Mozilla 中使用抗锯齿和灰度时属性值无效

◮OpenGL-抗锯齿

OpenGL 抗锯齿与 glAccum 和 glRasterPos

OpenGL核心技术之抗锯齿