これは恐らく疑問な質問ですが、私はしばらくこのことに気をつけていますので、とにかく尋ねます。GPUImage Swiftライブラリを使用してカスタムフィルタを実装する
ペットプロジェクトにHudson/Nashville
フィルタを実装しようとしています。私はちょっと調べて、いくつかのオープンソースプロジェクトをチェックアウトし、(これは私が理解できない)ベースのプロジェクトを見つけました。彼らはGPUImage2
を使用して実装されたフィルタを持っていますが、私は彼らのアプローチについてはわかりませんでした。
私は、使用しているオーバーレイとその他の画像とGLSL
ファイルを持っています。
私の質問は、この画像とシェーダファイルを使用してカスタムフィルタを実装する方法です。
注:LookupFilter
のアプローチを示唆したように使用してみましたが、結果はあまり良くありませんでした。私にいくつかのコードを教えてもらえれば非常に役に立ちます。おかげ
アップデート:私はこれを理解しようとしています何
。下のようなカスタムシェーダがある場合、入力画像をuniform inputImageTexture2
、inputImageTexture3
& inputImageTexture4
にどのように渡す必要がありますか?それをサブクラス化してPictureInput
〜BasicOperation
として渡しますか?もしそうなら、どうですか?私は何が欠けていますか?私は適切な文書がないためにコードをかなり歩くことができませんでした。私は今シェーダとさまざまなコンポーネントを読みましたが、まだGPUImage2
のカスタムフィルタを使用する方法を理解することはできません。助けてください。
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;
}