我正在尝试在我的iOS应用程序中使用着色器进行图像处理。我可以将一对着色器(顶点和片段)用于滤镜图像(例如,垂直或水平模糊),但是如果我需要先应用垂直模糊然后再应用水平模糊该怎么办。我应该如何在我的render()
功能中链接此动作?
一些代码示例将是极好的!
您实际上无能为力。您需要从模糊的第一步开始填充缓冲区,然后再开始下一步。最好的办法是先通过纹理绘制,然后再通过第二遍重新绘制到主缓冲区。通常,如果您有2个以上的遍,则将需要2个纹理,然后在每个遍之后交换:使用第一个着色器将图像绘制到texture1,将第二个着色器从texture1绘制到texture2,将第三个着色器从texture2绘制到texture1 ...
因此,您需要一个帧缓冲区对象(FBO),这意味着只需生成一个新的帧缓冲区和具有所需大小的纹理(您很可能需要使用POT纹理),然后将纹理作为颜色附加到帧缓冲区依恋glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, targetTexture, 0);
。
完成此操作后,您将剩下几乎所有的标准绘制过程。只需绑定该帧缓冲区以对其进行绘制,设置视口,设置矩阵(如果有)...所有内容都将被绘制到纹理上,就好像它是主缓冲区一样。
绘制完纹理后,可以使用该纹理将其绘制回主缓冲区。只需绑定主缓冲区并绑定FBO的纹理,而不是原始图像的纹理。其余代码应相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句