流光效果渲染

Constructor

@:value({ speed : 1 })@:glFragmentSource("#pragma header\nprecision highp float;\n#define TAU 6.12\n#define MAX_ITER 5\nuniform float u_speed;\nvoid main(void){\n\t#pragma body\n\tfloat time = u_speed * 0.5 + 5.;\n\tvec2 uv = openfl_TextureCoordv.xy;\n\tvec2 p = mod(uv * TAU, TAU) - 250.0;\n\tvec2 i = vec2(p);\n\tfloat c = 1.;\n\tfloat inten = .0045;\n\tfor(int n = 0;n < MAX_ITER;n ++){\n\t\tfloat t = time * (1. - (3.5 / float(n + int(1.))));\n\t\ti = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(1.5 * t + i.x));\n\t\tc += 1.0 / length(vec2(p.x / (cos(i.x + t) / inten), p.y / (cos(i.y + t) / inten)));\n\t}\n\tc /= float(MAX_ITER);\n\tc = 1.17 - pow(c, 1.4);\n\tvec4 tex = texture2D(openfl_Texture, uv);\n\tvec3 colour = vec3(pow(abs(c), 20.0));\n\tcolour = clamp(colour + vec3(0.0, 0.0, .0), 0.0, tex.a);\n\tfloat alpha = c * tex[3];\n\ttex[0] = tex[0] + colour[0] * alpha;\n\ttex[1] = tex[1] + colour[1] * alpha;\n\ttex[2] = tex[2] + colour[2] * alpha;\n\tgl_FragColor = tex + color * tex;\n}")new (speed:Float = 1)

Variables

MAX_ITER:Dynamic

TAU:Dynamic

@:uniformspeed:Float

@:keepu_speed:ShaderParameter<Float>

Methods