canvas实现webgl三维多面玻璃晶体穿梭飞行动画效果代码
代码语言:html
所属分类:三维
代码描述:canvas实现webgl三维多面玻璃晶体穿梭飞行动画效果代码
代码标签: canvas webgl 三维 多面 玻璃 晶体 穿梭 飞行 动画
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
* {
box-sizing: border-box;
}
html, body {
margin: 0;
min-height: 100vh;
overflow: hidden;
background:
repeating-radial-gradient(
circle at center,
#444 0 10%,
#111 10% 20%
);
touch-action: none;
}
canvas {
width: 100%;
height: auto;
object-fit: contain;
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<script >
const canvas = window.canvas;
const gl = canvas.getContext("webgl2");
const dpr = Math.max(1, .5 * window.devicePixelRatio);
/** @type {Map<string,PointerEvent>} */
const touches = new Map();
const vertexSource = `#version 300 es
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endif
in vec2 position;
void main(void) {
gl_Position = vec4(position, 0., 1.);
}
`;
const fragmentSource = `#version 300 es
/*********
* made by Matthias Hurrle (@atzedent)
*/
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endif
out vec4 fragColor;
uniform vec2 resolution;
uniform vec2 touch;
uniform float time;
uniform int pointerCount;
#define mouse (touch/resolution)
#define TAU 6.2831853
#define ESN 1.5707963
#define PI 3.141592
#define N .3
#define T time
#define S smoothstep
#define P pointerCount
#define doubleplane(p,o,n) max(dot(p-o,n),dot(-p-o,n))
const float PHI = (.5 + .5 * sqrt(5.));
const float INV_PHI = PHI - 1.;
const vec3 tint = vec3(.85, .9, 1);
mat2 rot(float a) {
float s = sin(a),
c = cos(a); return mat2(c, -s, s, c);
}
vec3 pattern(vec2 p, float t) {
float a = ESN,
proc = pow(S(.0, 1., -cos(t*.25)*.5+.5), 8.),
anim = -cos(ESN+t*.125)*.5+.5,
scene = S(.0, 1., anim);
p = mod(vec2(log(length(p)) - t, atan(p.y, p.x) / TAU * 6.), 1.) - .5;
p *= rot(floor(atan(p.y, p.x) / a + .5) * a);
p = p.y < .0 ? -p: p;
a = abs(p.x + p.y - N);
a = a > N ? abs(p.x - p.y + N): a;
vec3
col = mix(vec3(1. - exp(-a * 9.)), tint, .25),
glo = mix(mix(vec3(3,1,2), vec3(1,2,3), scene), tint*.1, pow(col, vec3(.4545)));
return mix(col, glo, proc);
}
float icosa(vec3 p, float s) {
float n = 1. / sqrt(3.);
vec3
a = n * vec3(1, 1, 1),
b = n * vec3(-1, 1, 1),
c = n * vec3(-1, 1, -1),
d = n * vec3(1, 1, -1.........完整代码请登录后点击上方下载按钮下载查看
网友评论0