canvas实现跟随鼠标移动的烟雾流体动画效果代码
代码语言:html
所属分类:动画
代码描述:canvas实现跟随鼠标移动的烟雾流体动画效果代码
代码标签: canvas 跟随 鼠标 移动 烟雾 流体 动画
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Anton&display=swap" rel="stylesheet"> <link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/normalize.5.0.css"> <style> html, body { margin: 0; height: 100%; } canvas { display: block; width: 100%; height: 100vh; } h1 { white-space: nowrap; font-size: 5rem; font-family: "Anton", sans-serif; letter-spacing: 0.35em; color: #fff; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } @media (max-width: 1460px) { h1 { font-size: 4rem; } } @media (max-width: 850px) { h1 { font-size: 3rem; } } @media (max-width: 650px) { h1 { font-size: 2rem; } } </style> </head> <body translate="no"> <canvas></canvas> <h1>Smoke Streams</h1> <script > "use strict"; let canvas = document.getElementsByTagName("canvas")[0]; canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; let config = { TEXTURE_DOWNSAMPLE: 1, DENSITY_DISSIPATION: 0.98, VELOCITY_DISSIPATION: 0.99, PRESSURE_DISSIPATION: 0.8, PRESSURE_ITERATIONS: 25, CURL: 35, SPLAT_RADIUS: 0.002 }; let pointers = []; let splatStack = []; let _getWebGLContext = getWebGLContext(canvas); let gl = _getWebGLContext.gl; let ext = _getWebGLContext.ext; let support_linear_float = _getWebGLContext.support_linear_float; function getWebGLContext(canvas) { let params = { alpha: false, depth: false, stencil: false, antialias: false }; let gl = canvas.getContext("webgl2", params); let isWebGL2 = !!gl; if (!isWebGL2) gl = canvas.getContext("webgl", params) || canvas.getContext("experimental-webgl", params); let halfFloat = gl.getExtension("OES_texture_half_float"); let support_linear_float = gl.getExtension("OES_texture_half_float_linear"); if (isWebGL2) { gl.getExtension("EXT_color_buffer_float"); support_linear_float = gl.getExtension("OES_texture_float_linear"); } gl.clearColor(0.0, 0.0, 0.0, 1.0); let internalFormat = isWebGL2 ? gl.RGBA16F : gl.RGBA; let internalFormatRG = isWebGL2 ? gl.RG16F : gl.RGBA; let formatRG = isWebGL2 ? gl.RG : gl.RGBA; let texType = isWebGL2 ? gl.HALF_FLOAT : halfFloat.HALF_FLOAT_OES; return { gl: gl, ext: { internalFormat: internalFormat, internalFormatRG: internalFormatRG, formatRG: formatRG, texType: texType }, support_linear_float: support_linear_float }; } function pointerPrototype() { this.id = -1; this.x = 0; this.y = 0; this.dx = 0; this.dy = 0; this.down = false; this.moved = false; this.color = [30, 0, 300]; } pointers.push(new pointerPrototype()); let GLProgram = function () { function GLProgram(vertexShader, fragmentShader) { if (!(this instanceof GLProgram)) throw new TypeError("Cannot call a class as a function"); this.uniforms = {}; this.p.........完整代码请登录后点击上方下载按钮下载查看
网友评论0