opengl es2を勉強する。その7 画像をぼかす

http://xissburg.com/faster-gaussian-blur-in-glsl/

こちらを参考にして、

画像をぼかすには(横方向のみですが)

private String fragmentShaderCode =
                 "precision mediump float;" +
                 "varying vec2 v_texCoord;" +
                 "uniform sampler2D s_texture;" +
                 "uniform float Opacity;" +
                 "uniform float Distance;" +
                 "void main() {" +
                     "vec4 sum = vec4(0.0);" +
                         "gl_FragColor = vec4(0.0);" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(-0.028*Distance, 0.0))*0.0044299121055113265;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(-0.024*Distance, 0.0))*0.00895781211794;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(-0.020*Distance, 0.0))*0.0215963866053;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(-0.016*Distance, 0.0))*0.0443683338718;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(-0.012*Distance, 0.0))*0.0776744219933;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(-0.008*Distance, 0.0))*0.115876621105;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(-0.004*Distance, 0.0))*0.147308056121;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord)*0.159576912161;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(0.004*Distance, 0.0))*0.147308056121;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(0.008*Distance, 0.0))*0.115876621105;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(0.012*Distance, 0.0))*0.0776744219933;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(0.016*Distance, 0.0))*0.0443683338718;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(0.020*Distance, 0.0))*0.0215963866053;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(0.024*Distance, 0.0))*0.00895781211794;" +
                         "gl_FragColor += texture2D(s_texture, v_texCoord+vec2(0.028*Distance, 0.0))*0.0044299121055113265;" +
                         "gl_FragColor = vec4( gl_FragColor.r,gl_FragColor.g,gl_FragColor.b,gl_FragColor.a*Opacity );" +
                 "}";

にする

GLES20.glUniform1f(GLES20.glGetUniformLocation(shaderProgram, "Distance"), 2.0f);

みたいにfloatの値を入力する事でボケるのだけど、値が大きいとボケの密度が高すぎるのでボケでなくなってしまうので、小さい値を入れておく。

ここは使い方の1つ。という事でちょっと特異的な事ですが、アップしてみました

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑