Я только учусь делать некоторые шейдеры для манипулирования изображениями. После нескольких попыток, я думаю, я понял, что правильно вычислил средний цвет ядра с произвольным радиусом. Этот вопрос здесь для того, чтобы убедиться, что я правильно понял, в частности, моя главная проблема связана с этой линией
summedColor += texture2D(inputImageTexture, tc + (vec2(x, y) * vec2(stepW, stepH)));
Я вычислил правильную координату? (т.е. tc + current kernel coordinate multiplied for the step size calculated on image size
). Я думаю, что результат выглядит правильно, но я хотел бы получить ваше подтверждение.
varying vec2 tc;
uniform sampler2D inputImageTexture;
uniform float stepW; // calculated as 1.0 / width;
uniform float stepH; // calculated as 1.0 / height;
void main() {
vec4 summedColor = vec4(0., 0., 0., 0.);
const int kRadius = 3;
int pixelsCount = 0;
for(int x = -kRadius; x <= kRadius; x++) {
for(int y = -kRadius; y <= kRadius; y++) {
pixelsCount++;
summedColor += texture2D(inputImageTexture, tc + (vec2(x, y) * vec2(stepW, stepH)));
}
}
vec4 averageColor = summedColor / float(pixelsCount);
}