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 抗锯齿不起作用的主要内容,如果未能解决你的问题,请参考以下文章