2017-08-06 228 views
-1

我想調整這個ShaderToy example頂點創建'火花' 他們。已嘗試玩gl_PointCoordgl_FragCoord沒有任何結果。也許,這裏有人可以幫助我?GLSL點燃頂點着色器

我需要類似這樣的gif動畫效果:

]

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); 


} 

據我瞭解有VEC 2 POS玩,將其設置爲頂點位置

+0

將設置爲fragCoord.xy/iResolution.xy適應[THREE.PointsMaterial](https://github.com/mrdoob/three.js/blob/dev/src/materials/PointsMaterial.js)並不容易?看看點[three.js示例](https://threejs.org/examples/)。 – 2pha

回答

1

你不需要玩pos。由於頂點着色器僅由每個頂點運行,因此無法使用Pos來處理其像素值。但是,您可以使用gl_PointCoord來處理像素。

我能想到的兩種方法僅適用於OpenGL ES的

  • 在片段着色器改變紋理的規模

    1. gl_PointSize在頂點着色器,你可以改變紋理UV值,例如, vec4 color = texture(texture0,((gl_PointCoord-0.5)* factor)+ vec2(0.5));其中,

    如果你不想使用FS任何紋理,但只有像素處理,

    可以設置UV像((gl_PointCoord-0.5) * factor) + vec2(0.5) 代替UV這通常是在Shadertoy