c++ - 创建纹理后,OpenGL 抗锯齿形状

标签 c++ opengl textures antialiasing post-processing

我有一个透明的 OpenGL 纹理,上面有一些由 OpenGL 绘制的简单形状: 圆、多边形、线。它们是在没有抗锯齿、多重采样等的情况下绘制的。因此,它们具有锯齿状的边界。

我无权访问纹理创建过程,因此无法启用多重采样 . 有没有办法在绘制完成后使这些平滑?

最佳答案

有基于图像的抗锯齿过滤器,例如 FXAA和 MLAA 将在这种情况下工作。我不太愿意称它们为抗锯齿,因为它们并没有真正避免锯齿,它们只是在事后隐藏它。它们更类似于智能模糊滤镜。

我从您的其他问题中得知您不想使用 FBO,因此我相信您使用的是 OpenGL 2.1 或更旧的代码库。 FXAA 可以在 GLSL 1.20 中实现,但在 1.30 (GL 3.0) 中效果更好。我不知道的一件事是在包含透明度的图像上使用 FXAA,它期望在 alpha channel (或 sRGB,这不是 GL 2.1 功能)中编码亮度。

您可能不希望直接将 FXAA 应用到您的纹理,而是需要绘制到 PBuffer 中并在混合输入纹理后应用 FXAA。

关于c++ - 创建纹理后,OpenGL 抗锯齿形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28933196/

相关文章:

c++ - OpenGL:glGenBuffer 与 glGenBuffersARB

c++ - 使 OpenGL 代码适应 Qt(特别是 keyPressEvent)

graphics - 为什么缺失的纹理被黑色和紫色的棋盘格所取代?

c++ - C++中具有可变尺寸的二维数组

javascript - 使用 `NODE_MODULE_VERSION 70.` 而不是 NODE_MODULE_VERSION 48 重建 nbind

c++ - 正确返回一个 unique_ptr

opengl - 无法使用多重采样渲染到纹理

c++ - 运行 Boost.Build 时如何处理 "batch recursion exceeds stack limits"?

c++ - VBO 比绘制基元的过时方法慢 - 为什么?

opengl - 在 GLSL 中如何判断事件纹理是否为纹理 id 0?