使用WebGL或OpenGL ES 2,如何在屏幕上渲染RBO的内容?

时间:2011-12-29 00:13:48

标签: opengl-es-2.0 webgl

使用WebGL(受限于OpenGL ES 2 API),我成功渲染纹理,然后在屏幕上显示该纹理。因为它是一种纹理,所以它不是抗锯齿的。如果我渲染到RBO然后在屏幕上显示,我将能够利用AA。

我的渲染目标设置如下所示:

  1. 创建FBO
  2. 绑定FBO
  3. 创建纹理(要渲染)
  4. 创建深度缓冲区并将其绑定为RBO
  5. 将纹理和RBO附加到FBO
  6. 我的渲染更新循环如下所示:

    1. 将场景渲染到上面步骤#2中创建的FBO
    2. 使用上面步骤#3中创建的纹理渲染屏幕对齐的四边形
    3. 使用桌面OpenGL,我会调用glBlitFramebuffer(),而不是将屏幕对齐四边形。

      如何使用抗锯齿渲染场景?我需要用RBO替换纹理吗?如果是这样,我使用什么调用来绑定RBO以绘制屏幕对齐的四边形?

1 个答案:

答案 0 :(得分:4)

除非你执行回读并重新上传到纹理到blit,否则你不能将RBO的内容blit到WebGL中进行屏幕显示,这很慢。

WebGL不支持任何形式的FBO上的MSAA(既不作为RBO也不作为RTT)。

您可以通过多种方式实现自己的抗锯齿。

  • 以2:2的比例渲染并缩小(使用webgl的谷歌地图执行此操作)
  • 以1:1的大小渲染,对颜色和深度进行sobel或laplace边缘检测,并使用边缘强度作为重量运行双边高斯模糊(我在我的一些演示中使用了这种技术,它运行良好, http://codeflow.org/entries/2011/apr/11/advanced-webgl-part-1/
  • 使用GPU Pro 2中的形态抗锯齿配方(我还没试过)