- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我刚开始使用 OpenGL 编程,我正在构建一个时钟应用程序。我希望它看起来像这样简单:http://i.stack.imgur.com/E73ap.jpg
但是,我的应用程序看起来非常“未消除锯齿”:http://i.stack.imgur.com/LUx2v.png
我尝试了红皮书中提到的GL_SMOOTH_POLYGON方法。然而,这似乎没有任何作用。
我正在使用配备英特尔集成显卡的笔记本电脑。名片doesn't support像 GL_ARB_multisample 这样的东西。
此时我的应用程序看起来抗锯齿有哪些选择?
最佳答案
Intel 集成视频卡因不支持 OpenGL 抗锯齿而臭名昭著。不过,您可以解决这个问题。
第一个选项:手动 super 采样
制作一个比屏幕大 2 倍的纹理。通过 FBO 将场景渲染到纹理,然后使用双线性插值以一半大小渲染纹理,使其充满屏幕。由于要绘制的像素增加了 4 倍,可能会非常慢(在复杂场景中)。
会导致弱抗锯齿(所以我不推荐它用于像你的时钟这样的桌面软件)。自己看看:
第二个选项:(高级)
使用着色器执行 Morphological Antialiasing
。这是一项新技术,我不知道实现起来有多容易。它被一些高级游戏使用。
第三种选择:
通过纹理模拟 OpenGL 的图元,利用纹理和双线性插值来发挥您的优势。描述了该技术 here .
第四个选项:为时钟的每个元素使用单独的纹理。
例如,对于您的小时箭头,不要使用形状像箭头的扁平黑色 GL_POLYGON。相反,使用旋转的 GL_QUAD,在图像程序中绘制带有小时箭头图像的纹理。然后双线性插值将在您旋转它时处理抗锯齿。
此选项将花费最少的精力并且看起来非常好。
第五种选择:
使用支持软件渲染的库 -
此类库包含它们自己的抗锯齿渲染算法,因此它们不依赖于您的视频卡来抗锯齿。优点是:
缺点是性能更差,但这对时钟应用程序来说根本不重要,当您考虑到我提到的智能重绘功能时,它就会好转。
对于时钟应用程序之类的应用程序,非常推荐第五个选项。 OpenGL 主要用于游戏、3D 软件和诸如音乐可视化器之类的强烈图形化的东西。对于桌面应用程序,它的级别太低且实现差异太大。
关于c++ - OpenGL 中的抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112106/
我是一名优秀的程序员,十分优秀!