我想要一个非水平的 GPUImageTiltShiftFilter 旋转。我想将它旋转到任意旋转角度。我还希望过滤器速度快,它可以使用带有 UIRotationGestureRecongizer 的 UI 旋转。
我该怎么做呢?
啊,想通了!
不要修改 GPUImageTiltShiftFilter,而是创建一个新的 GPUImageFilterGroup 作为 GPUImageGaussianSelectiveBlurFilter 的修改版本来添加旋转。
我补充说:
uniform highp float rotation;
在 kGPUImageSMTiltShiftFragmentShaderString 中,我将 distanceFromCenter 线添加到 GPUImageGaussianSelectiveBlurFilter 的主要部分,以将 GPUImageGaussianSelectiveBlurFilter 变成带有旋转的倾斜移位:
void main()
{
lowp vec4 sharpImageColor = texture2D(inputImageTexture, textureCoordinate);
lowp vec4 blurredImageColor = texture2D(inputImageTexture2, textureCoordinate2);
highp vec2 textureCoordinateToUse = vec2(textureCoordinate2.x, (textureCoordinate2.y * aspectRatio + 0.5 - 0.5 * aspectRatio));
highp float distanceFromCenter = abs((textureCoordinate2.x - excludeCirclePoint.x) * aspectRatio*cos(rotation) + (textureCoordinate2.y-excludeCirclePoint.y)*sin(rotation));
gl_FragColor = mix(sharpImageColor, blurredImageColor, smoothstep(excludeCircleRadius - excludeBlurSize, excludeCircleRadius, distanceFromCenter));
}