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;
  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 touches = new Set();

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 T time*.1
#define hue(a)(.6 + .6 * cos((a) * 6.3 + vec3(0, 23, 21)))

float rnd(vec2 a) {
  return
    fract(
      sin(
        dot(
          a.xy,
          vec2(711.212, 453.9876)
        )
      ) * 87510.76886);
}

void main(void) {
  vec2 uv = (
    gl_FragCoord.xy - .5 * resolution.xy
  ) / min(resolution.x, resolution.y);

  vec3 col = vec3(0);
  vec2 st = uv * 8.;

  vec2 grid = abs(fract(st) - .5);
  vec2 id = floor(st);
  col += length(1.-max(grid.x, grid.y)) + sin(rnd(id)+T);
  col = hue(col + rnd(id) - sin(1.+dot(id, id)+T));
  col -= .75+length(uv);
  col *= 33.;
  
  fragColor = vec4(1.-col, 1);
}
`;
let time;
let buffer;
let program;
let resolution;
let vertice.........完整代码请登录后点击上方下载按钮下载查看

网友评论0