原理参考自的 BugRunner 博客
原图:

效果图:

-
void main(void)
-
{
-
vec2 uv = gl_FragCoord.xy / sketchSize.xy;
-
-
vec3 c = texture2D(Tex, uv).rgb;
-
-
// 声明与初始化
-
const int kSize = (MSIZE-1)/2;
-
float kernel[MSIZE]; // 2*kSize + 1
-
vec3 final_colour = vec3(0.0);
-
-
float Z = 0.0;
-
// 1-D:kernel[0 - 2*kSize + 1]
-
// kernel[kSize] 权重最大
-
for (int j = 0; j <= kSize; ++j)
-
{
-
kernel[kSize+j] = kernel[kSize-j] = normpdf(float(j), SIGMA);
-
}
-
-
vec3 cc;
-
float factor;
-
-
for (int i=-kSize; i <= kSize; ++i)
-
{
-
for (int j=-kSize; j <= kSize; ++j)
-
{
-
vec2 newUV = vec2(( gl_FragCoord.xy + vec2(float(i),float(j)) ) / sketchSize.xy);
-
cc = texture2D(Tex, newUV).rgb;
-
-
// 颜色权重 * 1-D 距离权重 * 1-D 距离权重
-
factor = normpdf3(cc-c, BSIGMA) * kernel[kSize+j]*kernel[kSize+i];
-
-
// 用于归一化权重
-
Z += factor;
-
final_colour += factor*cc;
-
-
}
-
}
-
-
gl_FragColor = vec4(final_colour/Z, 1.0);
-
-
}
相关文章:
-
2021-12-16
-
2021-12-12
-
2022-12-23
-
2021-11-19
-
2022-12-23
-
2022-12-23
-
2022-12-23
猜你喜欢
-
2022-03-03
-
2022-12-23
-
2022-12-23
-
2021-09-29
-
2022-02-02
-
2022-12-23
-
2022-12-23
相关资源
-
下载
2022-12-12
-
下载
2022-12-11
-
下载
2021-06-27
-
下载
2021-06-05
-
下载
2021-06-05