Как удалить артефакт с горизонтальной полосой из шейдера GLSL? - PullRequest
0 голосов
/ 21 февраля 2020

Я работаю над пользовательской фотографией с эффектом глубины. Я передаю координаты касания в рендерер GLSurfaceView для «изменения перспективы». Но при этом между текстурой и ее зеркалом есть горизонтальные полосы.

enter image description here

Код моего фрагментного шейдера:

#ifdef GL_ES
precision highp float;
#endif

varying vec2 texcoordVarying;
uniform sampler2D texture;
uniform sampler2D depth;

uniform float time;
uniform vec2 touch;
uniform vec2 limit;
uniform vec4 resolution;

vec2 mirrored(vec2 v) {
  vec2 m = mod(v,2.);
  return mix(m,2.0 - m, step(1.0 ,m));
}

void main(void) {

      vec2 uv = 1.0 * gl_FragCoord.xy / resolution.xy ;
      vec2 vUv = (uv - vec2(0.5))*resolution.zw + vec2(0.5);
      vUv.y = 1. - vUv.y;
      vec4 tex1 = texture2D(depth,mirrored(vUv));
      vec2 fake3d = vec2(vUv.x + (tex1.r - 0.5)* touch.x/limit.x, vUv.y + (tex1.r - 0.5)* touch.y/limit.y );
      gl_FragColor = texture2D(texture,mirrored(fake3d));
}

Я передаю такие координаты:

queueEvent {
            renderer.touchTargetX = event.rawX / renderer.width
            renderer.touchTargetY = event.rawY / renderer.height
        }

        requestRender()

1 Ответ

1 голос
/ 23 февраля 2020

Если у вас режим обтекания GL_REPEAT, попробуйте использовать GL_CLAMP_TO_EDGE.

...