canvas+webgl实现曼陀罗式能量波扩散动画效果代码

代码语言:html

所属分类:动画

代码描述:canvas+webgl实现曼陀罗式能量波扩散动画效果代码

代码标签: canvas webgl 曼陀罗 能量波 扩散 动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  

  
  
<style>
* {
  box-sizing: border-box;
}

html, body {
  margin: 0;
  min-height: 100vh;
  min-height: 100dvh;
  overflow: hidden;
  
  background:
  repeating-radial-gradient(
  circle at center,
    #444 0 10%,
    #111 10% 20%
  );
  
  touch-action: none;
}

canvas {
  width: 100%;
  height: auto;
  object-fit: contain;
}
</style>


  
  
</head>

<body>
  <canvas id="canvas"></canvas>
  
      <script  >
/*********
* made by Matthias Hurrle (@atzedent)
*/

/** @type {HTMLCanvasElement} */
const canvas = window.canvas;
const gl = canvas.getContext('webgl2');
const dpr = window.devicePixelRatio;

const vertexSource = `#version 300 es
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endif

in vec2 position;

void main(void) {
    gl_Position = vec4(position, 0., 1.);
}
`;
const fragmentSource = `#version 300 es
/*********
* made by Matthias Hurrle (@atzedent)
*/

#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endif

out vec4 fragColor;

uniform vec2 resolution;
uniform float time;

#define S smoothstep
#define T .112358+time

#define TAU 6.2831853

vec3 palette(float k) {
  vec3
  a = vec3(.5),
  b = a,
  c = a+a,
  d = vec3(.3,.2,.2);

  return a+b*cos(TAU*(c*k+d));
}

void main(void) {
  float
  mx = max(resolution.x, resolution.y),
  mn = min(resolution.x, resolution.y),
  pr = mx/mn;
  vec2 uv = (
    gl_FragCoord.xy-.5*resolution
  )/mn,
  p = uv*4.5/pr;

  vec3 col = vec3(0);
  const float n = 3.5;

  for (float i = .0; i < 6.; i++) {
    p *= 2.;
    p = p-n*clamp(round(p/n), -1.,1.);
    float d = exp(-length(p*.2));

    d = log(1e-5*d);
    d = pow(sin(d*20.+T*1.4), 2.)*.125;
    d = abs(d);
    d = pow(5e-3/d, .25);

    col += d * palette(-length(uv)+i*.1-T*.7);
    col = pow(col, vec3(1.28));
  }

  col *= exp(-125e-5*(length(uv)));
  col = pow(S(.0, 20.,co.........完整代码请登录后点击上方下载按钮下载查看

网友评论0