/
index5.html
executable file
·113 lines (105 loc) · 4.74 KB
/
index5.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>WebGL Scroll Spiral | Demo 2 | Codrops</title>
<meta name="description" content="Some decorative background scroll effects for websites using WebGL and regl" />
<meta name="keywords" content="regl, webgl, background, website, decorative, scroll effect, spiral, distortion " />
<meta name="author" content="Codrops" />
<link rel="shortcut icon" href="favicon.ico">
<link href="https://fonts.googleapis.com/css?family=Roboto+Mono:400,700" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="css/normalize.css" />
<link rel="stylesheet" type="text/css" href="css/demo.css" />
<script>document.documentElement.className = 'js';</script>
</head>
<body class="demo-5 loading">
<canvas id="webgl"></canvas>
<svg class="hidden">
<symbol id="icon-arrow" viewBox="0 0 24 24">
<title>arrow</title>
<polygon points="6.3,12.8 20.9,12.8 20.9,11.2 6.3,11.2 10.2,7.2 9,6 3.1,12 9,18 10.2,16.8 " />
</symbol>
<symbol id="icon-drop" viewBox="0 0 24 24">
<title>drop</title>
<path d="M12,21c-3.6,0-6.6-3-6.6-6.6C5.4,11,10.8,4,11.4,3.2C11.6,3.1,11.8,3,12,3s0.4,0.1,0.6,0.3c0.6,0.8,6.1,7.8,6.1,11.2C18.6,18.1,15.6,21,12,21zM12,4.8c-1.8,2.4-5.2,7.4-5.2,9.6c0,2.9,2.3,5.2,5.2,5.2s5.2-2.3,5.2-5.2C17.2,12.2,13.8,7.3,12,4.8z" />
<path d="M12,18.2c-0.4,0-0.7-0.3-0.7-0.7s0.3-0.7,0.7-0.7c1.3,0,2.4-1.1,2.4-2.4c0-0.4,0.3-0.7,0.7-0.7c0.4,0,0.7,0.3,0.7,0.7C15.8,16.5,14.1,18.2,12,18.2z" />
</symbol>
</svg>
<main>
<header class="content content--header">
<div class="content__top">
<h1 class="main-title">Scroll Spirals</h1>
<p class="main-tagline">Decorative Background Effects with WebGL</p>
<a class="github" href="https://github.com/codrops/ScrollSpiral/">GitHub</a>
<div class="codrops-links">
<a class="codrops-icon codrops-icon--prev" href="https://tympanus.net/Development/DeveloperDesignerPageLayout/" title="Previous Demo"><svg class="icon icon--arrow"><use xlink:href="#icon-arrow"></use></svg></a>
<a class="codrops-icon codrops-icon--drop" href="https://tympanus.net/codrops/?p=30761" title="Back to the article"><svg class="icon icon--drop"><use xlink:href="#icon-drop"></use></svg></a>
</div>
<nav class="demos">
<a class="demo" href="index.html">Demo 1</a>
<a class="demo" href="index2.html">Demo 2</a>
<a class="demo" href="index3.html">Demo 3</a>
<a class="demo" href="index4.html">Demo 4</a>
<a class="demo demo--current" href="index5.html">Demo 5</a>
<a class="demo" href="index6.html">Demo 6</a>
<a class="demo" href="index7.html">Demo 7</a>
<a class="demo" href="index8.html">Demo 8</a>
<a class="demo" href="index9.html">Demo 9</a>
</nav>
</div>
</header>
<section class="content content--main"></section>
<section class="content content--related">
<p class="content__text">This demo is powered by <a href="http://regl.party/">regl — declarative and stateless webgl</a></p>
<h3 class="content__text">If you enjoyed this demo you might also like:</h3>
<a class="media-item" href="https://tympanus.net/Development/AnimatedHeaderBackgrounds/">
<img class="media-item__img" src="img/related/AnimatedHeaderBackgrounds.png">
<h3 class="media-item__title">Animated Background Headers</h3>
</a>
<a class="media-item" href="https://tympanus.net/Tutorials/PrismEffectSlider/">
<img class="media-item__img" src="img/related/PrismEffectSlider.jpg">
<h3 class="media-item__title">Prism Effect Slider</h3>
</a>
</section>
</main>
<script src="js/regl.min.js"></script>
<script type="x-shader/x-fragment" id="fragmentShader">
#define TWO_PI 6.2831853072
#define PI 3.14159265359
precision highp float;
uniform float globaltime;
uniform vec2 resolution;
uniform float aspect;
uniform float scroll;
uniform float velocity;
uniform sampler2D texture;
const float timescale = 0.1;
const float twist = 2.0;
vec2 rotate(vec2 v, float angle) {
float c = cos(angle);
float s = sin(angle);
return v * mat2(c, -s, s, c);
}
float nsin(float value) {
return sin(value * TWO_PI) * 0.5 + 0.5;
}
void main(void) {
float time = globaltime * timescale;
vec2 center = vec2(sin(TWO_PI * time * 0.2), cos(TWO_PI * time * 0.2)) * nsin(time * 0.3) * 0.5;
vec2 tx = (gl_FragCoord.xy / resolution.xy - 0.5 - center) * vec2(aspect, 1.0);
float len = 1.0 - length(tx);
float zoom = 1.0 + scroll - len * 3.0 * (1.0 - scroll) + len * velocity * 10.0;
vec4 imgColor = texture2D(
texture,
rotate(
(tx + center) * vec2(1.0, -1.0) * zoom,
twist * TWO_PI * nsin(len + time) * scroll + time
) + 0.5
);
gl_FragColor = imgColor;
}
</script>
<script src="js/demo5.js"></script>
</body>
</html>