2012-03-14 3 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

원하는 결과를 보여주기 위해 포토샵을 사용해주세요. – datenwolf

+0

@datenwolf 이것은 원하는 출력입니다. [link] (http://i.imgur.com/XRKUf.jpg) – Manish

+0

datenwolf는 실제 질문을 잘 다루고 있습니다. 내 유일한 의견은 당신이 동적으로 수정하는 것보다는 두 가지 가능한 샘플링 좌표를 나타내는 두 개의 변수로 더 나은 성능을 보일 가능성이 높다는 것입니다. 직관적으로, 두 샘플을 무조건 수행 한 다음 색상을 선택하는 것이 더 빠를 수도 있습니다 (그러나 프로파일 링해야합니다 - https://developer.apple.com/library/ios/documentation/3DDrawing/Conceptual/ 페이지 87 참조). OpenGLES_ProgrammingGuide/OpenGLES_ProgrammingGuide.pdf) – Tommy

답변

2

거기에 실제 흐림을 원하거나 선형 혼합을 원하십니까? 블러 링은 블러 링 커널을 포함하기 때문에, 블렌드는 y 좌표에 따라 그 둘 사이의 간단한 보간이됩니다.

선형 혼합 코드입니다.

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;  
} 

실제 흐림 효과는 흐리게 처리되는 커널을 적용 할 때 좀 더 복잡합니다. 기본적으로 인접한 텍셀을 반복하고 일부 분포 (일부 보케를 추가 할 수있는 추가 텍스처를 통해 해당 분포를 제공함으로써 가장 유연함)에 따라 합계하는 두 개의 중첩 루프가 필요합니다.

+0

안녕하세요 @ datenwolf, 위의 원하는 효과를 달성하는 데 도움이되지 않습니다. 그것이하는 일은 전체 픽셀의 매끄러운 단계를 수행하는 것입니다. 그러나 내가 원하는 것은 당연히 중심에 있습니다. – Manish

+0

내 필요성을 더 명확히하기 위해, 내가하려는 것은 이미지의 가운데 부분을 잘라내어 (20 픽셀을 말함) 부드러운 그라디언트 병합으로 다른 2 개의 절반에 합류하는 것입니다. 희망은 이것이 나의 필요를 이해하고 나를 돕는 데 도움이되기를 바랍니다. – Manish

+0

@Manish : 그게 매개 변수의 가파른 부분입니다. 원하는 값으로 매개 변수를 늘리면 값이 클수록 보간 영역이 작아집니다. 매개 변수로 조정할 수 있도록 유니폼을 만드는 것이 더 좋습니다. – datenwolf

관련 문제