opengl - 重新调整后对整个场景进行抗锯齿处理

标签 opengl glut antialiasing

我在编译 openGl 代码时遇到了问题。问题是我想实现全场景抗锯齿,但我不知道该怎么做。我从 Nvidia 控制面板打开了强制抗锯齿,这才是我真正想要获得的。我现在用 GL_POLYGON_SMOOTH 来做。显然效率不高,也不好看。这是问题

1) 我应该使用多重采样吗? 2) openGl 在管道的哪个位置混合抗锯齿的颜色? 3) 除了 GL_*_SMOOTH 和多重采样之外,还有哪些替代方案?

最佳答案

GL_POLYGON_SMOOTH 不是进行全屏 AA (FSAA) 的方法。

不确定在这种情况下“效率低下”是什么意思,但它肯定不好看,因为它倾向于混合在网格中间(在三角形边缘)。

现在,关于 FSAA 和您的问题:

  1. 多重采样(又名 MSAA)是当今执行 FSAA 的标准方法。通常的替代方法是 super 采样 (SSAA),即以更高分辨率进行渲染,最后进行下采样。它要贵得多。
  2. 规范说,从逻辑上讲,GL 保留一个样本缓冲区(像素缓冲区大小的 4 倍,对于 4xMSAA)和一个像素缓冲区(总共 5 倍的内存),并且在每个样本上写入样本缓冲区,使用样本缓冲区中当前 4 个样本的 resolved 值更新像素缓冲区(顺便说一下,这不称为混合。混合是在写入样本缓冲区时发生的事情,由 glBlendFunc 等人控制)。实际上,这并不是硬件中发生的情况。通常,您只写入样本缓冲区(硬件通常会尝试压缩数据),当需要使用它时,GL 实现将在使用发生之前立即解析完整缓冲区。如果您实际直接使用示例缓冲区(那么根本不需要解析),这也会有所帮助。
  3. 我涵盖了 SSAA 及其费用。最新的技术称为形态抗锯齿 (MLAA),目前正在积极研究中。这个想法是对完全渲染的图像进行后处理,并对看起来像锐边的部分进行抗锯齿处理。底线是,它不是由 GL 本身实现的,您必须将其编码为后处理过程。我把它包括在内以供引用,但它可能会花费 quite a lot .

关于opengl - 重新调整后对整个场景进行抗锯齿处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3446347/

相关文章:

webgl - 如何通过 Emscripten 激活抗锯齿

java - LWJGL 3 中的抗锯齿

opengl - 如何获得光泽而不关闭ghci?

java - LibGDX 相机平滑翻译

c++ - 如何将QImage格式转换为OpenGL支持的格式

opengl - 法线贴图,TBN矩阵计算

c - 使用按键的 GLUT 旋转相机无法正常工作

c++ - 关于在任何计算机上以相同速度运行程序的问题

c++ - SDL2 抗锯齿

c++ - 使用 Freetype 和 OpenGL 模糊文本