【问题标题】:How do you smooth the edges a primitive using a shader?如何使用着色器平滑图元的边缘?
【发布时间】:2015-01-25 18:30:13
【问题描述】:

在 OpenGL 中使用片段着色器软化简单图元(例如 GL_TRIANGLES)的边缘的最简单技术是什么?

我读到在GL_BLEND 上下文中,我们可以根据片段与边缘的接近程度来调整片段的 alpha 值;但是在实践中如何有效地实现呢?

【问题讨论】:

  • 多重采样抗锯齿
  • 我已经读过这个,但是一些硬件不支持它。我已经看到可以在着色器中实现此效果,如本文所述:http.developer.nvidia.com/GPUGems3/gpugems3_ch25.html 我无法使用提供的代码的原因是因为它绘制了一条别名曲线。我希望找到一种可用于平滑任意多边形边缘的方法。
  • 如果您使用混合软化边缘,您将不得不从后到前绘制几何图形。这可能是不切实际的,但这本质上是多边形平滑在桌面 OpenGL 中的工作原理,然后才被删除。从您的平台标签中,我假设您使用的是 OpenGL ES - 不幸的是,多重采样渲染缓冲区不是 OpenGL ES 2.0 的核心。但是,MSAA 在支持像素着色器的硬件上是相当标准的——创建它是为了减少像素着色器必须运行的次数。它可能暴露在 EGL 级别。

标签: android opengl-es glsl jogl antialiasing


【解决方案1】:

可以使用抗锯齿平滑图元的边缘。

OpenGL 提供multisample buffers 以允许对图像进行硬件加速锯齿,但并非所有平台都支持此功能,因为它依赖于 GPU 上的专用硬件缓冲区。另一种方法是render your display to a texture using a FrameBuffer,然后通过 Timothy Lottes 的Fast Approximate Anti Aliasing (FXAA) 着色器传递渲染的纹理,这需要单次传递。

【讨论】:

  • FXAA 在典型的 Android 设备上运行速度很慢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 2014-03-14
相关资源
最近更新 更多