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