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