Animation GLSL火花顶点着色器

Animation GLSL火花顶点着色器,animation,glsl,shader,vertex-shader,Animation,Glsl,Shader,Vertex Shader,我正在尝试调整此着色器以创建顶点“火花” 从他们当中。曾尝试玩过gl_PointCoord和gl_FragCoord,但没有任何结果。也许这里有人能帮我 我需要类似于此动画gif的效果: 据我所知,我必须使用vec2 pos,将其设置为顶点位置 您不需要使用pos。由于顶点着色器仅由每个顶点运行,因此无法使用pos处理其像素值。但是,您可以使用gl_PointCoord处理像素 我只能想出两种方法来改变纹理的比例 opengl es中顶点着色器中的gl_PointSize 在片段着色器中,可

我正在尝试调整此着色器以创建顶点“火花” 从他们当中。曾尝试玩过
gl_PointCoord
gl_FragCoord
,但没有任何结果。也许这里有人能帮我

我需要类似于此动画gif的效果:


据我所知,我必须使用vec2 pos,将其设置为顶点位置

您不需要使用pos。由于顶点着色器仅由每个顶点运行,因此无法使用pos处理其像素值。但是,您可以使用gl_PointCoord处理像素

我只能想出两种方法来改变纹理的比例

  • opengl es中顶点着色器中的gl_PointSize
  • 在片段着色器中,可以更改纹理UV值,例如

    vec4颜色=纹理(纹理0,((gl_PointCoord-0.5)*因子)+vec2(0.5))

  • 如果不想使用任何纹理,只想在FS中使用像素处理

    您可以设置UV-like
    ((gl_PointCoord-0.5)*因子)+vec2(0.5)

    在Shadertoy中,uv通常设置为
    fragCoord.xy/iResolution.xy
    ,而不是
    ?看看下面的要点。
    
    uniform float time;
    uniform vec2 mouse;
    uniform vec2 resolution;
    
    #define M_PI 3.1415926535897932384626433832795
    
    float rand(vec2 co)
    {
        return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
    }
    
    void main( ) {
    
        float size = 30.0;
        float prob = 0.95;
    
        vec2 pos = floor(1.0 / size * gl_FragCoord.xy);
    
        float color = 0.0;
        float starValue = rand(pos);
    
        if (starValue > prob)
        {
            vec2 center = size * pos + vec2(size, size) * 0.5;
    
            float t = 0.9 + sin(time + (starValue - prob) / (1.0 - prob) * 45.0);
    
            color = 1.0 - distance(gl_FragCoord.xy, center) / (0.5 * size);
            color = color * t / (abs(gl_FragCoord.y - center.y)) * t / (abs(gl_FragCoord.x - center.x));
        }
        else if (rand(gl_FragCoord.xy / resolution.xy) > 0.996)
        {
            float r = rand(gl_FragCoord.xy);
            color = r * ( 0.25 * sin(time * (r * 5.0) + 720.0 * r) + 0.75);
        }
    
        gl_FragColor = vec4(vec3(color), 1.0);
    
    
    }