webgl+canvas炫酷屏保动画效果代码

代码语言:html

所属分类:动画

代码描述:webgl+canvas炫酷屏保动画效果代码

代码标签: 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