見在底部添加強度參數GPUImageFalseColorFilter
它看起來像GPUImageFalseColorFilter從另一個過濾器複製更新 - 我可以看到在着色強度性能,但它實際上並沒有做任何事情。我已經爲它添加了setter和obj-c包裝,但是現在我似乎無法獲得gl_fragColor
返回值以將強度作爲參數。
這裏的着色器具有100%強度工作:
precision lowp float;
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
uniform lowp float intensity;
uniform vec4 shadowTintColor;
uniform vec4 highlightTintColor;
const mediump vec3 luminanceWeighting = vec3(0.2125, 0.7154, 0.0721);
void main()
{
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
float luminance = dot(textureColor.rgb, luminanceWeighting);
gl_FragColor = vec4(mix(shadowTintColor.rgb, highlightTintColor.rgb, luminance), textureColor.a);
}
);
我已經試過:
gl_FragColor = vec4(mix(shadowTintColor.rgb, highlightTintColor.rgb, luminance), intensity);
gl_FragColor = mix(textureColor, mix(shadowTintColor.rgb, highlightTintColor.rgb, luminance), intensity);
等極少數,但有錯誤無數的過濾器崩潰(No matching function for call to mix(vec4, vec3, float)
, Too many arguments to constructor of 'vec4'
)。
如何獲得強度屬性?
對於獎勵積分,原始過濾器被編寫爲採用vec4色調作爲輸入,但僅在過濾器中使用vec3色調顏色。除了全球「強度」屬性之外,我還想在每個單獨的色調顏色上支持一個Alpha通道。
更新:
提出了一些嚴肅的進展與此 - 它現在接受單一強度PARAMS像這樣:
precision lowp float;
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
uniform lowp float shadowTintIntensity;
uniform lowp float highlightTintIntensity;
uniform vec4 shadowTintColor;
uniform vec4 highlightTintColor;
const mediump vec3 luminanceWeighting = vec3(0.2125, 0.7154, 0.0721);
{
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
highp float luminance = dot(textureColor.rgb, luminanceWeighting);
highp vec4 shadowResult = mix(textureColor, max(textureColor, vec4(mix(shadowTintColor.rgb, textureColor.rgb, luminance), textureColor.a)), shadowTintIntensity);
highp vec4 mixedResult = mix(textureColor, min(shadowResult, vec4(mix(shadowResult.rgb, highlightTintColor.rgb, luminance), textureColor.a)), highlightTintIntensity/3.0);
gl_FragColor = mixedResult;
}
);
我現在就可以得到它與強度適當地影響形象,但在亮度權重上似乎有點偏差?我在高光計算器上手動添加了一個/ 3.0
乘數,並且它似乎已經平衡了陰影和高光強度效果,但是這並不像是正確的方式。 編輯:這甚至沒有適當地融合在一起 - 如果未指定highlightTint,則效果不起作用。
如何正確地將最終圖像混合在一起?
您可能需要瓜分了一些值,它會工作之前... [這只是一個粗略的想法](https://gist.github.com/anonymous/a8c6eb859096103e56c3)。 –
@lll看到更新 - 我分散了強度值,它更接近。只需要找到一種方法來混合shadowResult和highlightResult。 – brandonscript