webgl+canvas炫酷屏保动画效果代码
代码语言:html
所属分类:动画
代码描述:webgl+canvas炫酷屏保动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
</head>
<body translate="no">
<script type="x-shader/x-fragment">#version 300 es
/*********
* made by Matthias Hurrle (@atzedent)
*/
precision highp float;
out vec4 O;
uniform float time;
uniform vec2 resolution;
uniform vec2 touch;
uniform int pointerCount;
#define P pointerCount
#define mouse ((touch-.5*R)/min(R.x,R.y))
#define FC gl_FragCoord.xy
#define R resolution
#define T time
#define S smoothstep
#define N normalize
#define rot(a) mat2(cos(a-vec4(0,11,33,0)))
float rnd(vec2 p) {
return fract(sin(dot(p, vec2(12.9898, 78.233)))*345678.);
}
float noise(vec2 p) {
vec2 i = floor(p),
f = fract(p),
u = S(.0, 1., f);
float
a = rnd(i),
b = rnd(i+vec2(1, 0)),
c = rnd(i+vec2(0, 1)),
d = rnd(i+1.);
return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);
}
vec3 palette(float t) {
vec3
a = vec3(.65),
b = vec3(1.5),
c = vec3(1,.5,.5),
d = vec3(.4,.3,.4);
return a+b*cos(2.3*(c*d+t));
}
float fbm(vec2 p) {
float t=.0, a=1.;
for (int i=0; i<5; i++) {
vec2 s=vec2(noise(p+T),noise(p-T+1.))*2.-.5;
t += a*(s.x);
p = 2.*p*rot(.39)+s;
a *= .5;
}
return t;
}
vec3 pattern(vec2 p) {
vec2 q=p*rot(T*.25);
float d = fbm(.25*q);
vec3 col = palette((1.-d)*(1.-fbm(p)));
return col;
}
vec2 map(vec3 p) {
return vec2(-(length(p)-10.),0);
}
vec3 norm(vec3 p) {
float h = 1e-3; vec2 k = vec2(-1, 1);
return N(
k.xyy*map(p+k.xyy*h).x+
k.yxy*map(p+k.yxy*h).x+
k.yyx*map(p+k.yyx*h).x+
k.xxx*map(p+k.xxx*h).x
);
}
float c.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0