GLSL Canny Shader - PullRequest
       37

GLSL Canny Shader

1 голос
/ 04 марта 2020

Я пытаюсь создать шейдер детектора контуров, используя детектор контуров, я настроил несколько библиотек nodeJS до нужной точки:

vertex:

precision highp float;

    attribute vec2 a_VertexPosition;
    attribute vec2 a_TextureCoord;

    varying vec2 v_TextureCoord;

    void main() {

      v_TextureCoord = a_TextureCoord;

      gl_Position = vec4(a_VertexPosition, 0., 1.);
    }

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

precision highp float;

    uniform vec2 resolution;
    uniform sampler2D t;

    uniform float u_WeakThreshold;
    uniform float u_StrongThreshold;
    uniform bool u_UseEdgeDetection;

    varying vec2 v_TextureCoord;

   ...functions canny

    float cannyEdgeDetection(
      sampler2D textureSampler,
      vec2 textureCoord,
      vec2 resolution,
      float weakThreshold,
      float strongThreshold
    ) {
      vec2 gradient = getSuppressedTextureIntensityGradient(textureSampler, textureCoord, resolution);
      float edge = applyDoubleThreshold(gradient, weakThreshold, strongThreshold);
      if (edge == .5) {
        edge = applyHysteresis(
          textureSampler, textureCoord, resolution, weakThreshold, strongThreshold);
      }
      return edge;
    }

    void main() {

      // vec2 uvTex = vec2(v_TextureCoord.x/3.0, v_TextureCoord.y/3.0);

      float edge = cannyEdgeDetection(
        t, v_TextureCoord, resolution, u_WeakThreshold, u_StrongThreshold);
      if (u_UseEdgeDetection) {
        gl_FragColor = vec4(vec3(edge), 1.);
      } else {
        gl_FragColor = texture2D(t, v_TextureCoord);
      }
    }

Извините за такой большой беспорядок кода, но я действительно новичок в этом и не знаю лучшего способа ссылки на функции.

Что приводит к изображение с окантовкой 1/4 ожидаемого размера. Кто-нибудь может помочь мне выяснить, почему результат меньше ожидаемого? Заранее спасибо! Я думаю, что это связано с координатами вершины, но я не уверен.

Result

...