OpenGLフィルタ効果(一)
2551 ワード
璣菗33751;33751;フィルタは、実際にはパッチ・カラーライターで特定の画素点を処理しています.グレースケールフィルタの原理:浮動小数点アルゴリズム:Gray=R*0.3+G*0.59+B*0.11 整数アルゴリズム:Gray=(R 30+G 59+B*11)/100 シフトアルゴリズム:Gray=(R 76+G 151+B*28)>>8 平均値法:Gray=(R+G+B)/3 緑色のみ取ります.Gray=G 考え方:元の画像の画素値 を取得する.適切な階調アルゴリズムを選択する .計算した所得をgl_に賦課する.FragColor インスタンスコード頂点測色器(フィルターは頂点測色器を操作する必要がないので、異なるフィルターの頂点測色器コードが一致します): 枚のオリジナル着色器
暖色フィルタの考え方:元の画像の画素値 を取得する.は、rgbチャネルの色に対応する赤/緑の値を追加し、rgbチャネルの値として を使用する.計算した所得をgl_に賦課する.FragColor 元の画像の画素値 を取得する.は、rgbチャネルの色に対応する青色値を追加し、rgbチャネルの値として を使用する.計算した所得をgl_に賦課する.FragColor 元の画像の画素値 を取得する.テクスチャ座標をマッピングする(y->>1-y) 計算した所得をgl_に賦課する.FragColor
attribute vec4 Position;
attribute vec2 TextureCoords;
varying vec2 TextureCoordsVarying;
void main (void) {
gl_Position = Position;
TextureCoordsVarying = TextureCoords;
}
precision highp float;
uniform sampler2D Texture;
varying vec2 TextureCoordsVarying;
void main (void) {
vec4 mask = texture2D(Texture, TextureCoordsVarying);
}
重み法(各色の値はGPUImageを参照しても良いし、上の値を使用しても良い)const highp vec3 W = vec3(0.2125, 0.7154, 0.0721);
void main (void) {
vec4 mask = texture2D(Texture, TextureCoordsVarying);
float luminance = dot(mask.rgb, W);
gl_FragColor = vec4(vec3(luminance), 1.0);
}
平均値法: float color = (mask.r + mask.g + mask.b) / 3.0;
vec4 tempColor = vec4(color,color,color,1);
gl_FragColor = vec4(vec3(tempColor), 1.0);
一般的に人の目は異なる色に対する感度が異なるので、3つの色の値の重みは違っています.一般的には緑が一番高く、赤が二番目、青が一番低く、それぞれWr=30%、Wg=59%、Wb=11%という合理的な値をとる方が効果的です.暖色フィルタの考え方:
vec4 mask = texture2D(Texture, TextureCoordsVarying);
gl_FragColor = mask + vec4(0.3,0.3,0.0,0.0);
冷色フィルタの考え方: vec4 mask = texture2D(Texture, TextureCoordsVarying);
gl_FragColor = mask + vec4(0.0,0.0,0.3,0.0);
フィルタの考え方を反転:vec4 color = texture2D(Texture, vec2(TextureCoordsVarying.x, 1.0 - TextureCoordsVarying.y));
転載先:https://juejin.im/post/5d22f34fe51d45775c73dd60