javascript - 为绘制的元素添加模糊度和片段着色器的片段颜色

标签 javascript three.js glsl webgl fragment-shader

我目前正在尝试通过将 3 个 Blob 相互融合来实现动画渐变,其中每个 Blob 都单独进行动画处理。您可以在最后找到所需结果的图像。

我已经能够使用以下片段着色器创建 3 个 Blob /圆圈并对其进行动画处理:

uniform vec2 resolution;
uniform vec3 blobs[3];
uniform vec3 colors[3];

vec3 draw_circle(vec2 position, vec3 color, float size) {
    float circle = sqrt(pow(position.x, 2.0) + pow(position.y, 2.0));
    circle = smoothstep(size, size + 0.003, 1.0 - circle);

    return color * circle;
}

void main() {
    vec2 coord = gl_FragCoord.xy / resolution;
    vec3 canvas = vec3(0);

    for (int i = 0; i < 3; i++) {
        vec3 circle = draw_circle(coord - blobs[i].xy / resolution, colors[i], blobs[i].z);
        canvas += circle;
    }

    gl_FragColor = vec4(canvas, 1.0);
}

我必须如何调整我的着色器和相应的圆圈才能实现您在最后一个图像中看到的这种模糊效果?我需要不同的方法吗?

我有什么
Result

我想要什么
Goal

最佳答案

使用smoothstep从中心到外部模糊圆圈:

vec3 draw_circle(vec2 position, vec3 color, float size) {
    float circle = length(position.xy);
    
    //circle = smoothstep(size, size + 0.003, 1.0-circle);
    circle = 1.0-smoothstep(0.0, size, circle);

    return color * circle;
}

关于javascript - 为绘制的元素添加模糊度和片段着色器的片段颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68285460/

相关文章:

javascript - 如何解决在 Android 中运行 NativeScript 应用程序时出现的问题?

javascript - 在 Three.js 中加载从 Blender 导出的模型后,骨骼动画被损坏

java - LWJGL 程序停止工作(不更改代码)[ECLIPSE]

c++ - GLSL 错误 : Undefined layout buffer variable in compute shader, 虽然已定义

c++ - 着色器和纹理坐标问题

javascript - 为什么我的 Angular 模板/ Controller 无法在 ngView 中加载?

javascript - 通过页面重新加载诊断内存泄漏

three.js - 在三个 js 应用程序 2d 文本中使用 css 字体与 typeface js

javascript - 控件 id 正确呈现但仍然出现 javascript 错误

javascript - 如何将模型查看器加载器的颜色设置为红色