OpenGL多样本抗锯齿和渲染纹理

时间:2014-04-23 13:19:54

标签: opengl fbo render-to-texture multisampling

我有一个有效的OpenGL多通道渲染示例,需要添加多重采样。

我尝试了两种方法。两种方法都不使用深度或模板缓冲区,而只使用渲染颜色。

在主体渲染期间进行多重采样

1. Bind Multisampling Fbo
2. Render geometry 
3. Blit / resolve multisampling
4. [1..n] Bind normal Fbo and apply post-process

最后的多重采样

1. Bind normal Fbo
2. Render geometry
3. [1..n] Bind normal Fbo and apply post-process
4. Bind Multisample Fbo
5. Render result texture onto a quad into the multisample fbo
6. Blit / resolve multisampling

问题

虽然两种方法似乎都有效(完整的帧缓冲等),但我可以清楚地看到第二种方法中的硬边。只使用第一种方法我实际上得到抗锯齿软边。

第二种方法存在概念性问题吗?是否有一些特定的先决条件进行多重采样,以便它不会像所描述的那样工作?

我更希望使用第二种方法。

1 个答案:

答案 0 :(得分:3)

你的第二种方法无效。多重采样使用覆盖率信息为属于像素的每个样本写入不同的值。将几何绘制到非多重采样缓冲区时,会丢失此信息。将非多重采样缓冲区渲染到多样本缓冲区中无法恢复不再存在的信息(已经发生混叠)。