Image GLSL中纹理的连续变换
我正在尝试使用GLSL中的着色器进行图像处理,以获得良好的性能和可移植性 但是我有多个步骤来转换图像,每一步都需要上一步的信息 例如,我想模糊图像,所以我需要每个像素周围的像素信息来平均它们,这不是问题,我只是使用Image GLSL中纹理的连续变换,image,opengl,glsl,shader,Image,Opengl,Glsl,Shader,我正在尝试使用GLSL中的着色器进行图像处理,以获得良好的性能和可移植性 但是我有多个步骤来转换图像,每一步都需要上一步的信息 例如,我想模糊图像,所以我需要每个像素周围的像素信息来平均它们,这不是问题,我只是使用texture2D(u_纹理,v_texCoords)处理后,我有一个vec4模糊 然后,在模糊之后,我想对之前模糊的图像进行边缘检测,但我不能使用vec4-fulled进行边缘检测,因为它无法访问周围的像素。如果我使用texture2D(u_texture,v_texCoords)同
texture2D(u_纹理,v_texCoords)代码>处理后,我有一个vec4模糊
然后,在模糊之后,我想对之前模糊的图像进行边缘检测,但我不能使用vec4-fulled
进行边缘检测,因为它无法访问周围的像素。如果我使用texture2D(u_texture,v_texCoords)代码>同样,我在第一张图像上进行处理,而不是在模糊图像上
在其他情况下,在图像处理的每一步之后,我希望能够访问上一步的所有像素
(我将java与GLSL中的libgdx和着色器一起使用)
谢谢。实现这种效果的标准方法是在两个渲染到纹理(RTT)缓冲区之间进行“乒乓”。例如,在模糊后进行边缘检测的情况下,可以执行以下渲染过程:
使用进行水平高斯模糊的着色器将初始纹理渲染为RTT#1
使用进行垂直高斯模糊的着色器将RTT#1渲染为RTT#2
使用执行边缘检测的着色器将RTT#2渲染为RTT#1
同样的原理可以扩展到将任意数量的后处理效果链接在一起,在两个缓冲区之间连续反弹
请注意,在我的插图中,我将模糊分割为两个过程,利用模糊是可分离效果这一事实。通过分离水平和垂直过程来处理较大的模糊核通常效率更高,最终得到相同的结果。好的,感谢乒乓球课程:)!这似乎是做我想做的事情的好方法。我将发布我的代码时,我将完成它(如果它的工作)。