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 vec2 resolution
;
uniform
float time;
#define FC gl_FragCoord.xy
#define R resolution
#define T time
#define MN min(R.x,R.y)
#define S smoothstep
#define beat(a) pow(S(.4,.6,sin(3.1415/a*T)*.5+.5),5.)
float rnd(vec2 p) {
        p
=fract(p*vec2(12.9898,78.233));
        p
+=dot(p,p+34.56);
       
return fract(p.x*p.y);
}
float spirals(vec2 uv) {
       
float c=.0, d=.0, k=.35;
       
for (float i=1.;i<8.;i++) {
                c
+=abs(sin(T/i)*.05)/length(vec2(uv.y,sin(uv.y+T*i)*k)-uv.yx);
                vec2 p
=uv;
                p
.x-=sin(p.y+T*i)*k;
                p
.y+=T*1.5;
                p
.y=mod(p.y,.5)-.25;
                d
+=.008/length(p);
       
}
        c
*=abs(d);
       
return c;
}
vec3 pattern
(vec2 uv) {
       
float k=4./MN;
       
return sqrt(spirals(uv*.95)*vec3(
                spirals
(uv-k),
                spirals
(uv),
                spirals
(uv+k)
       
))*.25;
}
void main(){
        vec3 col
=vec3(0);
       
float
        tt
=beat(3.),
        t
=beat(6.),
        m
=S(1e-3,.5,1./(10.+90.*(1.-tt))),
        n
=S(1e-3,.5,1./(7.+93.*tt));
        vec2 uv
=(FC-.5*R)/MN;
       
if (R.x>R.y) uv=vec2(uv.y,-uv.x);
        uv
*=1.5+sqrt(t*.8);
        vec2 p
=uv*(1.+.25*sqrt(t));
        uv
-=uv*mix(.2,1.,rnd(uv))*n;
        p
-=p*mix(.4,.8,rnd(FC))*m;
        col
+=vec3(pow(sin(p.x*10.)*cos(p.y*10.),.2))*.2;
        col
=max(col,pattern(uv));
        O
=vec4(col,1);
}</script>
 
     
<script >
window.onload = init
function init() {
  let renderer, canvas
  const dpr = Math.max(1, devicePixelRatio)
  const resize = () => {
    const { innerWidth: width, innerHeight: height } = window
    canvas.width = width * dpr
    canvas.height = height * dpr
    if (renderer) {
      renderer.updateScale(dpr)
    }
  }
  const source = document.querySelector("script[type='x-shader/x-fragment']").textContent
  canvas = document.createElement("canvas")
  document.title = "🌀 Focus Shift"
  document.body.innerHTML = ""
  document.body.appendChild(canvas)
  document.body.style = "margin:0;touch-action:none;overflow:hidden"
  canvas.style.width = "100%"
  canvas.style.height = "auto"
  canvas.style.userSelect = "none"
  renderer = new Re.........完整代码请登录后点击上方下载按钮下载查看

网友评论0