ios - 独立渲染到多采样缓冲区和解析帧缓冲区

标签 ios objective-c opengl-es opengl-es-2.0

所以我正在使用 GL_LINE_STRIP 绘制一些图形,并且我正在使用多重采样缓冲区,因此线条看起来不会那么参差不齐。问题是我在图表的背景中有一些线条作为图例。多重采样会把线条弄乱,因为它们原本应该是 1 像素厚,但由于多重采样,它有时会使线条分布在 2 个像素上,这些像素比原始颜色稍微暗一些,使线条看起来与彼此。

是否可以将这些图例线直接渲染到已解析的帧缓冲区,然后在顶部绘制多采样内容?这实际上不会对背景图例线进行多重采样,而是对图形线进行多重采样。

这可能吗?我只想知道,在我深入研究之前,后来发现你不能这样做。如果你有一些演示代码给我看,那也很好

最佳答案

如果图例最后出现会容易得多:您可以将 MSAA 缓冲区解析到 View 帧缓冲区中,然后通常将图例渲染到已解析的缓冲区中。但另一种方法是不可能的,因为多采样分辨率只会覆盖目标帧缓冲区的任何先前内容,它不会进行任何混合或深度测试。

在顶部实际渲染 MSAA 内容的唯一方法是首先将它们解析为另一个 FBO,然后在图例顶部绘制该 FBO 的纹理。但为了图例不被完全覆盖,您将不得不使用 alpha 混合。因此,您基本上在渲染之前将 MSAA 缓冲区清除为 0 的 alpha,然后将图形渲染到其中。然后解析这些缓冲区并在图例顶部绘制生成的纹理,使用 alpha 混合仅覆盖实际绘制图形的部分。

关于ios - 独立渲染到多采样缓冲区和解析帧缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16943426/

相关文章:

objective-c - pushViewController 占用过多显示 View

objective-c - 在 Swift 中将参数传递给 Objective C 类

objective-c - renderInContext 在视网膜和非视网膜设备上

objective-c - 如何将 OpenGLES 着色器转换为 Metal 兼容的着色器?

ios - OpenGL ES 2.0/iOS : Skewed drawing of RGBA4 texture

ios - 防止 UICollectionView 在 vi​​ew.layoutIfNeeded 期间设置动画

ios - 将协议(protocol)转换为方法参数并传递

opengl-es - 如何在 OpenGL-ES 中获取 VBO 的大小?

ios - 如何创建仅包含静态单元格的 Collection View ?

ios - 从另一个类访问文本字段的值