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