素人のアンドロイドアプリ開発日記

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

2015.07.08

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つ。という事でちょっと特異的な事ですが、アップしてみました

同じカテゴリの記事を紹介します

OpenGL ES2.0を使ってアプリを作りました。opengl es2を勉強する。その10 表示用にクラスを作る。opengl es2を勉強する。その9 shaderにマトリックスを用いるopengl es2を勉強する。その8 画像の明るさを変更するopengl es2を勉強する。その6 画像のopacityを適用opengl es2を勉強する。その5 画像のアルファチャンネルopengl es2を勉強する。その4 shaderを使って、モノクロにするopengl es2を勉強する。その3 画像を複数描くopengl es2を勉強する。その2 画像を描くopengl es2を勉強する。その1 三角形を書いて動かす。

カテゴリー:OpenGL es2

公開中のアプリ、是非ダウンロードしてみてください

2chまとめのたね

RSSを利用してさまざまなブログの情報をキュレーションしてくれるアプリ

インストールする

ひらがな戦記

OPENGL ES2 を利用したカルタのソーシャルゲーム

インストールする