Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image GLSL中纹理的连续变换_Image_Opengl_Glsl_Shader - Fatal编程技术网

Image GLSL中纹理的连续变换

Image GLSL中纹理的连续变换,image,opengl,glsl,shader,Image,Opengl,Glsl,Shader,我正在尝试使用GLSL中的着色器进行图像处理,以获得良好的性能和可移植性 但是我有多个步骤来转换图像,每一步都需要上一步的信息 例如,我想模糊图像,所以我需要每个像素周围的像素信息来平均它们,这不是问题,我只是使用texture2D(u_纹理,v_texCoords)处理后,我有一个vec4模糊 然后,在模糊之后,我想对之前模糊的图像进行边缘检测,但我不能使用vec4-fulled进行边缘检测,因为它无法访问周围的像素。如果我使用texture2D(u_texture,v_texCoords)同

我正在尝试使用GLSL中的着色器进行图像处理,以获得良好的性能和可移植性

但是我有多个步骤来转换图像,每一步都需要上一步的信息

例如,我想模糊图像,所以我需要每个像素周围的像素信息来平均它们,这不是问题,我只是使用
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
  • 同样的原理可以扩展到将任意数量的后处理效果链接在一起,在两个缓冲区之间连续反弹


    请注意,在我的插图中,我将模糊分割为两个过程,利用模糊是可分离效果这一事实。通过分离水平和垂直过程来处理较大的模糊核通常效率更高,最终得到相同的结果。

    好的,感谢乒乓球课程:)!这似乎是做我想做的事情的好方法。我将发布我的代码时,我将完成它(如果它的工作)。