我刚开始使用OpenGL编程,正在构建时钟应用程序。我希望它看起来像这样简单:http://i.stack.imgur.com/E73ap.jpg
但是,我的应用程序看起来非常“无锯齿”:http://i.stack.imgur.com/LUx2v.png
我尝试了红皮书中提到的GL_SMOOTH_POLYGON方法。但是,这似乎没有任何作用。
我正在使用带有英特尔集成显卡的笔记本电脑。卡doesn't support之类的东西,例如GL_ARB_multisample。
这时我的应用看起来反走样了,我有什么选择?
最佳答案
英特尔集成显卡因缺乏对OpenGL抗锯齿的支持而臭名昭著。但是,您可以解决此问题。
第一个选项:手动 super 采样
制作两倍于屏幕的纹理。通过FBO将场景渲染为纹理,然后使用双线性插值以一半大小渲染纹理,以使其充满屏幕。由于要绘制的像素增加4倍,因此可能非常慢(在复杂场景中)。
会导致抗锯齿能力较弱(因此,我不建议您在时钟等台式机软件中使用它)。你自己看:
第二个选项:(高级)
使用着色器执行 Morphological Antialiasing 。这是一项新技术,我不知道实现起来有多么容易。一些高级游戏使用了它。
第三种选择:
通过通过纹理模拟OpenGL的原始来使用纹理和双线性插值,以发挥自己的优势。该技术描述为here。
第四个选项:
为时钟的每个元素使用单独的纹理。
例如,对于小时箭头,请不要使用形状像箭头一样的浅黑色GL_POLYGON。取而代之的是使用旋转的GL_QUAD,该GL_QUAD带有在图像程序中绘制的一小时箭头图像。然后,双线性插值将在您旋转时进行抗锯齿处理。
此选项将花费最少的精力,并且外观非常好。
第五个选项:
使用支持软件渲染的库-
此类库包含自己的抗锯齿渲染算法,因此它们不依赖于视频卡进行抗锯齿。优点是:
在OpenGL应用程序中使用
缺点是性能要差得多,但对于时钟应用程序根本不重要,考虑到我提到的智能重绘功能后,它就会扭转。
对于时钟应用程序,强烈建议使用第五个选项。 OpenGL主要用于游戏,3D软件和诸如音乐可视化工具之类的图形化内容。对于桌面应用程序,它的级别太低,实现方式也相差太多。