2012-03-14 10 views
1

イメージの滑らかなマージ効果をセンターカットで実現したいです。センターカット私は下のコードから達成した。Openglesフラグメントシェーダが効果を達成

varying highp vec2 textureCoordinate; 
uniform sampler2D videoFrame; 

void main(){ 
    vec4 CurrentColor = vec4(0.0); 

    if(textureCoordinate.y < 0.5){ 
     CurrentColor = texture2D(videoFrame,vec2(textureCoordinate.x,(textureCoordinate.y-0.125)));  
    } else{ 
     CurrentColor = texture2D(videoFrame,vec2(textureCoordinate.x,(textureCoordinate.y+0.125))); 
    } 

    gl_fragColor = CurrentColor;  
} 

上記のコードは、以下の画像に効果を与えます。

実際:

Actual

センターカット:

Centre cut

所望の出力:

Desired output

私が欲しいものがありますシャープなカットがそこにあるべきではない、両方の半分の滑らかな勾配マージがあるべきである。

+0

希望の結果を示すためにPhotoshopをしてください。 – datenwolf

+0

@datenwolfこれは望ましい出力です。 [link](http://i.imgur.com/XRKUf.jpg) – Manish

+0

datenwolfは実際の質問をうまく扱っています。私の唯一のコメントは、動的に変更するのではなく、2つの可能なサンプリング座標を表す2つの変化点で、より良いパフォーマンスが得られる可能性が高いということです。これに反して、無条件に両方のサンプルを実行してから色を選択する方が速いかもしれません(プロファイルする必要があります - https://developer.apple.com/library/ios/documentation/3DDrawing/Conceptual/のページ87を参照してください)。 OpenGLES_ProgrammingGuide/OpenGLES_ProgrammingGuide.pdf) – Tommy

答えて

2

実際のぼかしがありますか、または線形ブレンドしたいですか?ぼかしはカーネルのぼかしを伴うのに対し、ブレンドはy座標に応じてこれらの2つの間の単純な補間になります。

これは線形ブレンドのコードです。

varying highp vec2 textureCoordinate; 
uniform sampler2D videoFrame; 

void main(){ 
    float steepness = 20; /* controls the width of the blending zone, larger values => shaper gradient */ 
    vec4 a = texture2D(videoFrame,vec2(textureCoordinate.x,(textureCoordinate.y-0.125)));  
    vec4 b = texture2D(videoFrame,vec2(textureCoordinate.x,(textureCoordinate.y+0.125))); 

    /* EDIT: Added a clamp to the smoothstep parameter -- should not be neccessary though */ 
    vec4 final = smoothstep(a, b, clamp((y-0.5)*steepness, 0., 1.)); /* there's also mix instead of smoothstep, try both */ 

    gl_FragColor = final;  
} 

ぼかしカーネルを適用すると、実際のぼかしを行うのはもう少し複雑です。基本的には、2つのネストされたループを含み、隣接するテクセルを繰り返し、いくつかの分布に従ってそれらを合計します(追加のテクスチャを通してその分布を供給することによって最も柔軟になり、ボケを追加することもできます)。

+0

こんにちは@datenwolf、上記の私は希望の効果を達成するのに役立ちません。それはピクセル全体のスムーズなステップを実行することですが、私が望むものは中心にしかありません。 – Manish

+0

さらに私の必要性を明確にするために、私がしようとしているのは、画像の中央部分(例えば20ピクセル)をカットし、滑らかな勾配マージで他の2つの半分に参加することです。これが私の必要性を理解し、さらに助けてくれることを願っています。 – Manish

+0

@Manish:これはパラメータの急峻さのためです。あなたの望みに合わせてそのパラメータを増やしてください。値が大きいほど補間領域は小さくなります。それをパラメータとして調整できるようにすることは、より均一にすることをお勧めします。 – datenwolf

関連する問題