IOS OpenGL ES GPUImage 图像混合 GPUImageNormalBlendFilter

IOS OpenGL ES GPUImage 图像混合 GPUImageNormalBlendFilter-猿说编程
IOS OpenGL ES GPUImage 图像混合 GPUImageNormalBlendFilter
此内容为付费资源,请付费后查看
9.9
限时特惠
19.9
源码为站长亲测可以使用,如果下载地址无效,请直接留言或者联系站长
付费资源
已售 509
ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础

零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场

零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 特效

零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 函数

零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES GPUImage 使用

零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES GLSL 编程


一.简介

GPUImage 共 125 个滤镜, 分为四类

1、Color adjustments : 31 filters , 颜色处理相关
2、Image processing : 40 filters , 图像处理相关.
3、Blending modes : 29 filters , 混合模式相关.
4、Visual effects : 25 filters , 视觉效果相关.

GPUImageNormalBlendFilter 属于 GPUImage 图像混合模式相关,用于图像 alpha 混合。shader 源码如下:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:IOS – OpenGL ES GPUImage GPUImageNormalBlendFilter
//@Time:2022/07/02 06:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE
NSString *const kGPUImageNormalBlendFragmentShaderString = SHADER_STRING
(
 varying highp vec2 textureCoordinate;
 varying highp vec2 textureCoordinate2;
 
 uniform sampler2D inputImageTexture;
 uniform sampler2D inputImageTexture2;
 
 void main()
 {
     lowp vec4 c2 = texture2D(inputImageTexture, textureCoordinate);
	 lowp vec4 c1 = texture2D(inputImageTexture2, textureCoordinate2);
     
     lowp vec4 outputColor;
     
//     outputColor.r = c1.r + c2.r * c2.a * (1.0 - c1.a);
//     outputColor.g = c1.g + c2.g * c2.a * (1.0 - c1.a);
//     outputColor.b = c1.b + c2.b * c2.a * (1.0 - c1.a);
//     outputColor.a = c1.a + c2.a * (1.0 - c1.a);
     
     lowp float a = c1.a + c2.a * (1.0 - c1.a);
     lowp float alphaDivisor = a + step(a, 0.0); // Protect against a divide-by-zero blacking out things in the output

     outputColor.r = (c1.r * c1.a + c2.r * c2.a * (1.0 - c1.a))/alphaDivisor;
     outputColor.g = (c1.g * c1.a + c2.g * c2.a * (1.0 - c1.a))/alphaDivisor;
     outputColor.b = (c1.b * c1.a + c2.b * c2.a * (1.0 - c1.a))/alphaDivisor;
     outputColor.a = a;

     gl_FragColor = outputColor;
 }
);
#else
NSString *const kGPUImageNormalBlendFragmentShaderString = SHADER_STRING
(
 varying vec2 textureCoordinate;
 varying vec2 textureCoordinate2;
 
 uniform sampler2D inputImageTexture;
 uniform sampler2D inputImageTexture2;
 
 void main()
 {
     vec4 c2 = texture2D(inputImageTexture, textureCoordinate);
	 vec4 c1 = texture2D(inputImageTexture2, textureCoordinate2);
     
     vec4 outputColor;
     
     //     outputColor.r = c1.r + c2.r * c2.a * (1.0 - c1.a);
     //     outputColor.g = c1.g + c2.g * c2.a * (1.0 - c1.a);
     //     outputColor.b = c1.b + c2.b * c2.a * (1.0 - c1.a);
     //     outputColor.a = c1.a + c2.a * (1.0 - c1.a);
     
     float a = c1.a + c2.a * (1.0 - c1.a);
     float alphaDivisor = a + step(a, 0.0); // Protect against a divide-by-zero blacking out things in the output

     outputColor.r = (c1.r * c1.a + c2.r * c2.a * (1.0 - c1.a))/alphaDivisor;
     outputColor.g = (c1.g * c1.a + c2.g * c2.a * (1.0 - c1.a))/alphaDivisor;
     outputColor.b = (c1.b * c1.a + c2.b * c2.a * (1.0 - c1.a))/alphaDivisor;
     outputColor.a = a;
     
     gl_FragColor = outputColor;
 }
);
#endif

二.效果演示

使用GPUImageNormalBlendFilter,源图和目标图如下:

图片[1]-IOS OpenGL ES GPUImage 图像混合 GPUImageNormalBlendFilter-猿说编程
图片[2]-IOS OpenGL ES GPUImage 图像混合 GPUImageNormalBlendFilter-猿说编程

使用GPUImageNormalBlendFilter 效果如下:

图片[3]-IOS OpenGL ES GPUImage 图像混合 GPUImageNormalBlendFilter-猿说编程

三.源码下载

OpenGL ES Demo 下载地址 : IOS OpenGL ES GPUImage 图像混合 GPUImageNormalBlendFilter


四.猜你喜欢

  1. IOS OPenGL ES 设置图像亮度 GPUImageBrightnessFilter
  2. IOS OPenGL ES 调节图像曝光度 GPUImageExposureFilter
  3. IOS OpenGL ES 调节图像对比度 GPUImageContrastFilter
  4. IOS OPenGL ES 调节图像饱和度 GPUImageSaturationFilter
  5. IOS OPenGL ES 调节图像伽马线 GPUImageGammaFilter
  6. IOS OpenGL ES 调节图像反色 GPUImageColorInvertFilter
  7. IOS OpenGL ES 调节图像褐色 GPUImageSepiaFilter
  8. IOS OpenGL ES 调节图像灰色 GPUImageGrayscaleFilter
  9. IOS OpenGL ES 调节图像RGB通道 GPUImageRGBFilter
  10. IOS OpenGL ES 调节图像不透明度 GPUImageOpacityFilter
  11. IOS OpenGL ES 调节图像阴影 GPUImageHighlightShadowFilter
  12. IOS OpenGL ES 调节图像色彩替换 GPUImageFalseColorFilter
  13. GPUImage – 色彩直方图 GPUImageHistogramFilter
  14. GPUImage – 色彩直方图 GPUImageHistogramGenerator
  15. GPUImage – 像素平均色值 GPUImageAverageColor
  16. GPUImage – 亮度平均 GPUImageLuminosity
  17. IOS OpenGL ES 调节图像色度 GPUImageHueFilter
  18. IOS OpenGL ES 指定颜色抠图 GPUImageChromaKeyFilter
  19. IOS OpenGL ES 调节图像白平衡/色温 GPUImageWhiteBalanceFilter
  20. IOS OpenGL ES 设置图像 lookup 滤镜 GPUImageLookupFilter
  21. IOS OpenGL ES 设置图像滤镜 GPUImageAmatorkaFilter
  22. IOS OpenGL ES 设置图像滤镜 GPUImageSoftEleganceFilter
  23. IOS OpenGL ES 设置图像锐化 GPUImageSharpenFilter