gpt4 book ai didi

ios - 如何在 OpenGL ES 2.0 中使用可分离滤镜着色器?

转载 作者:行者123 更新时间:2023-11-29 10:22:54 25 4
gpt4 key购买 nike

我正在尝试在我的 iOS 应用程序中使用着色器进行图像处理。我可以使用一对着色器(顶点和片段)来过滤图像(例如垂直或水平模糊),但是如果我需要先应用垂直模糊然后应用水平模糊怎么办。我应该如何在我的 render() 函数中链接此操作?

一些代码示例会很棒!

最佳答案

你能做的真的不多。在开始下一步之前,您需要从模糊的一个步骤填充缓冲区。您可以做的最好的事情是在第一次传递时绘制到纹理,然后在第二次传递到主缓冲区时重新绘制。一般来说,如果你有超过 2 个 channel ,你将需要 2 个纹理,然后在每次 channel 后交换:使用第一个着色器绘制图像到纹理 1,第二个从纹理 1 到纹理 2,第三个从纹理 2 到纹理 1 ...

所以你需要的是一个帧缓冲区对象(FBO),这意味着简单地生成一个新的帧缓冲区和一个具有所需大小的纹理(你很可能需要使用 POT 纹理),将纹理附加到帧缓冲区作为颜色附件 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, targetTexture, 0);

完成此操作后,您将获得相当标准的绘图程序。简单地绑定(bind)这个帧缓冲区来绘制它,设置视口(viewport),设置矩阵(如果有的话)...所有这些都将被绘制到纹理上,就好像它是主缓冲区一样。

一旦你完成了对纹理的绘制,你就可以使用该纹理将它绘制回你的主缓冲区。只需绑定(bind)主缓冲区并绑定(bind)来自 FBO 的纹理而不是来自原始图像的纹理。其余代码应该相同。

关于ios - 如何在 OpenGL ES 2.0 中使用可分离滤镜着色器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33954236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com