OpenGL ES 2挤压失真滤镜,如photobooth app

时间:2012-09-17 17:43:05

标签: objective-c opengl-es-2.0

我正在尝试编写像photobooth ios或osx app中的挤压效果;我是着色器的新手,但我能够实现GPUImage库并调整一些着色器;但是我所能得到的只是球形失真,最终结果与我想要达到的结果略有不同。

这是我从#import修改的一些代码“GPUImageBulgeDistortionFilter.h”

特别是我正在使用此代码

    NSString *const kGPUImageBulgeDistortionFragmentShaderString = SHADER_STRING
    (
     varying highp vec2 textureCoordinate;

     uniform sampler2D inputImageTexture;

     uniform highp vec2 center;
     uniform highp float radius;
     uniform highp float scale;

     void main()
     {
         highp vec2 textureCoordinateToUse = textureCoordinate;
         highp float dist = distance(center, textureCoordinate);
         highp float PI = 3.14159265358979323846264;//stone added
         textureCoordinateToUse -= center;
        textureCoordinateToUse.x = 0.5+textureCoordinateToUse.x*cos(textureCoordinateToUse.x*PI/radius)*scale;
         textureCoordinateToUse.y = 0.5 + textureCoordinateToUse.y*cos(textureCoordinateToUse.y*PI/radius)*scale;


         gl_FragColor = texture2D(inputImageTexture, textureCoordinateToUse );

     }
    );

此代码使用cos和sin和PI,因此它绝对在球面范围内;任何暗示使其更平坦,中间有一个小的未拉伸部分将是一个很大的帮助!

0 个答案:

没有答案