OpenGL - 如何在绘制到屏幕帧缓冲区的两个连续帧之间进行解析

时间:2012-02-23 10:24:51

标签: iphone opengl-es

我有照片编辑视图,显示OpenGL ES 2.0视图 我想给出原始图像和过滤图像之间溶解的效果。是否可以使用OpenGL?

2 个答案:

答案 0 :(得分:1)

是的,但您需要能够将这两个不同的图像绑定为单独的纹理,以便将其输入到溶解着色器中。有了这些之后,您可以使用如下所示的片段着色器:

 varying highp vec2 textureCoordinate;

 uniform sampler2D inputImageTexture;
 uniform sampler2D inputImageTexture2;
 uniform lowp float mixturePercent;

 void main()
 {
    lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
    lowp vec4 textureColor2 = texture2D(inputImageTexture2, textureCoordinate);

    gl_FragColor = mix(textureColor, textureColor2, mixturePercent);
 }

其中inputImageTextureinputImageTexture2是要混合的纹理,而mixturePercent是第二个图像覆盖第一个图像的程度。

以上内容来自我的GPUImage开源框架,可能会使您的图像过滤工作变得更加容易。您可以将初始图像作为GPUImagePicture提供,向其添加GPUImageDissolveBlendFilter的目标,将另一个目标添加到GPUImagePicture以获取要应用的过滤器(或过滤器链),然后添加相同GPUImageDissolveBlendFilter的目标对于最后一个过滤器。通过改变混合上的mix,您可以在原始图像和已过滤的图像之间进行溶解。

GPUImage在幕后使用OpenGL ES 2.0,但它抽象出一些与OpenGL ES的直接交互。

答案 1 :(得分:0)

理论上,您需要一些时间和像素因子的阈值函数。 为了更细致地描述方法,我们需要知道像素因子(alpha通道,亮度,第三纹理......)。 看看this示例。