Я пытаюсь создать шейдер детектора контуров, используя детектор контуров, я настроил несколько библиотек 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 ожидаемого размера. Кто-нибудь может помочь мне выяснить, почему результат меньше ожидаемого? Заранее спасибо! Я думаю, что это связано с координатами вершины, но я не уверен.