canvas+webgl实现炫酷blob点交互动画效果代码

代码语言:html

所属分类:动画

代码描述:canvas+webgl实现炫酷blob点交互动画效果代码

代码标签: canvas webgl 炫酷 blob 交互 动画

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

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

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

  
  
<style>
* {
  margin: 0;
  padding: 0;
  background: black;
  overflow: hidden;
}
</style>



  
  
</head>

<body translate="no">

      <script >
function createShader(type, source) {
  const shader = gl.createShader(type);
  gl.shaderSource(shader, source);
  gl.compileShader(shader);
  if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
    console.error(gl.getShaderInfoLog(shader));
    gl.deleteShader(shader);
    return null;
  }
  return shader;
}

function createProgram(vertexShader, fragmentShader) {
  const program = gl.createProgram();
  gl.attachShader(program, vertexShader);
  gl.attachShader(program, fragmentShader);
  gl.linkProgram(program);
  if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
    console.error(gl.getProgramInfoLog(program));
    gl.deleteProgram(program);
    return null;
  }
  return program;
}

const canvas = document.createElement('canvas');
canvas.style.filter = 'saturate(.8) contrast(1.5)';
const gl = canvas.getContext('webgl', {
  preserveDrawingBuffer: true,
  powerPreference: 'high-performance' });

document.body.append(canvas);

function resize() {
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;
  gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
}

resize();
window.addEventListener('resize', resize);

class FlyShape {
  constructor({
    verts = [],
    colors = [],
    sizes = [],
    vert,
    frag,
    indices } =
  {}) {
    Object.assign(this, {
      verts: new Float32Array(verts),
      sizes: new Float32Array(sizes),
      colors: new Float32Array(colors),
      vertexBuffer: gl.createBuffer(),
      indices: indices && new Uint16Array(indices),
      indexBuffer: gl.createBuffer(),
      program: createProgram(
      createShader(gl.VERTEX_SHADER, vert ||
      `
              precision lowp float;
              attribute vec3 position;
              attribute vec4 vertexColor;
              att.........完整代码请登录后点击上方下载按钮下载查看

网友评论0