我正在为项目使用Brad Larson的GPUImage框架。
我试图找到一种方法来实现对GPUImageLookupFilter的强度控制,并且遇到了
https://github.com/BradLarson/GPUImage/issues/1485


  gl_FragColor = mix(textureColor,vec4(vec3(newColor),1.0),mixTexture);
  “ textureColor”是原始纹理,“ newColor”是LookupFilter结果,mixTexture是Alpha值(0〜1.0),您可以将其视为强度变量。


我不知道如何实现
我不知道如何实现OpenGL着色器。谁能告诉我在哪里添加此代码以实现对GPUImageLookupFilter的强度控制?

最佳答案

每个GPUImage过滤器都有自己的片段着色器。这些在该过滤器的.m文件顶部定义为字符串常量。对于GPUImageLookupFilter,这是GPUImageLookupFilter.m顶部的kGPUImageLookupFragmentShaderString。

这些片段着色器是类似于C的程序,与标准C相比,它们具有一些独特的属性,但是一旦您看到了一些示例,它们仍然应该相当容易地遵循。

正如该问题中指出的那样,如果您想要这种强度控件(出于性能原因,我默认不包括此控件),则需要创建一个新的滤镜类并将代码从GPUImageLookupFilter复制到其中(其中除了片段着色器之外几乎没有)。片段着色器有两种版本,一种用于Mac(通常不带精度限定符),另一种用于iOS。在这两者的底部都有一行输出最终颜色的线。您将需要修改它以使用如上所述的mix()操作。

如果您不想对强度值进行硬编码,则还需要添加一个属性来调整此强度值。为此,您需要在片段着色器中设置一个匹配的统一体以使用此属性。查看GPUImageBrightnessFilter,以获取与片段着色器中的统一匹配的属性的简单示例。

我建议您仔细阅读为各种过滤器提供的片段着色器代码,以了解它们的编写方式和工作方式。大多数人仅通过检查框架中已经存在的各种着色器就可以了解基础知识。

关于ios - GPUImageLookupFilter具有强度控制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23804661/

10-12 02:39