glsl 平均ブラー

2015/04/21

平均ブラーを取るだけの glsl 用関数ですが載せておきます。遅いので注意。


vec4 GetAverageBlurredValue(
    sampler2D target_texture,
    vec2 uv_coord,
    int width,
    int height,
    int filter_size_x,
    int filter_size_y)
{
    vec4 result = vec4(0.0, 0.0, 0.0, 0.0);
    float unit_coord_x = 1.0 / float(width);
    float unit_coord_y = 1.0 / float(height);
    vec2 target_uv_coord;
    int x, y;
    for (y = -filter_size_y; y <= filter_size_y; ++y)
    {
        for (x = -filter_size_x; x <= filter_size_x; ++x)
        {
            target_uv_coord = vec2(uv_coord.x + x * unit_coord_x, uv_coord.y + y * unit_coord_y);
            result += texture(target_texture, target_uv_coord);
        }
    }

    result = result / ((filter_size_x * 2 + 1) * (filter_size_y * 2 + 1));
    return result;
}

この関数を使って水面に映る光を描画するとこんな感じです。


  このエントリーをはてなブックマークに追加    

<<「ソフトウェア開発」の記事一覧に戻る

関連記事