Dies ist wahrscheinlich eine dumme Frage, aber ich bin für eine Weile mit dieser Sache fest, so werde es sowieso fragen.Implementieren benutzerdefinierter Filter mit GPUImage Swift-Bibliothek
Ich versuche, einen Hudson/Nashville
Filter auf einem Haustier Projekt zu implementieren. Ich habe ein wenig gegoogelt und ein paar Open-Source-Projekte ausprobiert und einige Objective-C
(die ich nicht verstehe) Projekte gefunden. Sie haben die Filter implementiert mit GPUImage2
, aber ich war mir nicht sicher über ihren Ansatz.
Ich habe das Overlay und andere Bilder, die sie verwendet haben und die GLSL
Dateien.
Also meine Frage ist, wie gehe ich über die Verwendung dieser Bilder und Shader-Dateien, um einen benutzerdefinierten Filter zu implementieren?
Hinweis: Ich habe versucht, mit der LookupFilter
Ansatz wie vorgeschlagen, aber das Ergebnis war nicht so gut. Es wäre super hilfreich, wenn Sie mir Code zeigen könnten. Dank
Update:
Was ich dies zu verstehen versuchen. Wenn ich einen benutzerdefinierten Shader wie den folgenden verwende, wie soll ich die Eingabebilder für uniform inputImageTexture2
, inputImageTexture3
& inputImageTexture4
übergeben. Übergebe ich es als PictureInput
an BasicOperation
durch Unterklasse? Wenn das so ist, wie? Was vermisse ich? Ich war nicht in der Lage, den Code wegen des Fehlens einer ordnungsgemäßen Dokumentation viel durchzulaufen. Ich habe jetzt über Shader und seine verschiedenen Komponenten gelesen, bin aber immer noch nicht in der Lage, einen Weg zu finden, mit benutzerdefinierten Filtern auf GPUImage2
zu arbeiten. Bitte helfen Sie.
precision highp float;
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2; //blowout;
uniform sampler2D inputImageTexture3; //overlay;
uniform sampler2D inputImageTexture4; //map
uniform float strength;
void main()
{
vec4 originColor = texture2D(inputImageTexture, textureCoordinate);
vec4 texel = texture2D(inputImageTexture, textureCoordinate);
vec3 bbTexel = texture2D(inputImageTexture2, textureCoordinate).rgb;
texel.r = texture2D(inputImageTexture3, vec2(bbTexel.r, texel.r)).r;
texel.g = texture2D(inputImageTexture3, vec2(bbTexel.g, texel.g)).g;
texel.b = texture2D(inputImageTexture3, vec2(bbTexel.b, texel.b)).b;
vec4 mapped;
mapped.r = texture2D(inputImageTexture4, vec2(texel.r, .16666)).r;
mapped.g = texture2D(inputImageTexture4, vec2(texel.g, .5)).g;
mapped.b = texture2D(inputImageTexture4, vec2(texel.b, .83333)).b;
mapped.a = 1.0;
mapped.rgb = mix(originColor.rgb, mapped.rgb, strength);
gl_FragColor = mapped;
}