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