particles_waves.html 3.5 KB
Newer Older
M
Mr.doob 已提交
1 2 3 4 5
<!DOCTYPE HTML>
<html lang="en">
	<head>
		<title>three.js - particles - waves</title>
		<meta charset="utf-8">
6
		<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
M
Mr.doob 已提交
7
		<style type="text/css">
M
Mr.doob 已提交
8
			body {
M
Mr.doob 已提交
9 10 11 12
				background-color: #000000;
				margin: 0px;
				overflow: hidden;
			}
13

M
Mr.doob 已提交
14
			a {
M
Mr.doob 已提交
15 16 17 18 19
				color:#0078ff;
			}
		</style>
	</head>
	<body>
20 21
		<script type="text/javascript" src="../build/Three.js"></script>
		<script type="text/javascript" src="http://github.com/mrdoob/stats.js/raw/master/build/Stats.js"></script>
M
Mr.doob 已提交
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

		<script type="text/javascript">

			var SCREEN_WIDTH = window.innerWidth;
			var SCREEN_HEIGHT = window.innerHeight;

			var SEPARATION = 100;
			var AMOUNTX = 50;
			var AMOUNTY = 50;

			var stats;
			var container;

			var particles, particle;
			var count;

			var camera;
			var scene;
			var renderer;

			var mouseX = 0;
			var mouseY = 0;

45 46
			var windowHalfX = window.innerWidth / 2;
			var windowHalfY = window.innerHeight / 2;
M
Mr.doob 已提交
47 48 49 50

			init();
			setInterval(loop, 1000 / 60);

M
Mr.doob 已提交
51
			function init() {
M
Mr.doob 已提交
52

M
Mr.doob 已提交
53
				container = document.createElement('div');
M
Mr.doob 已提交
54 55
				document.body.appendChild(container);

56
				camera = new THREE.Camera( 75, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 );
57
				camera.position.z = 1000;
M
Mr.doob 已提交
58

M
Mr.doob 已提交
59
				scene = new THREE.Scene();
M
Mr.doob 已提交
60

M
Mr.doob 已提交
61
				renderer = new THREE.CanvasRenderer();
M
Mr.doob 已提交
62 63 64 65 66
				renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);

				particles = new Array();

				var i = 0;
67
				var material = new THREE.ParticleCircleMaterial(0xffffff, 1);
M
Mr.doob 已提交
68

M
Mr.doob 已提交
69
				for (var ix = 0; ix < AMOUNTX; ix++) {
M
Mr.doob 已提交
70

M
Mr.doob 已提交
71
					for(var iy = 0; iy < AMOUNTY; iy++) {
M
Mr.doob 已提交
72

M
Mr.doob 已提交
73
						particle = particles[i++] = new THREE.Particle( material );
M
Mr.doob 已提交
74 75 76 77 78 79 80 81
						particle.position.x = ix * SEPARATION - ((AMOUNTX * SEPARATION) / 2);
						particle.position.z = iy * SEPARATION - ((AMOUNTY * SEPARATION) / 2);
						scene.add( particle );
					}
				}

				count = 0;

M
Mr.doob 已提交
82
				container.appendChild(renderer.domElement);
M
Mr.doob 已提交
83 84

				stats = new Stats();
M
Mr.doob 已提交
85 86 87
				stats.domElement.style.position = 'absolute';
				stats.domElement.style.top = '0px';
				container.appendChild(stats.domElement);
M
Mr.doob 已提交
88

89 90
				document.addEventListener('mousemove', onDocumentMouseMove, false);
				document.addEventListener('touchstart', onDocumentTouchStart, false);
M
Mr.doob 已提交
91
				document.addEventListener('touchmove', onDocumentTouchMove, false);
M
Mr.doob 已提交
92 93
			}

94 95
			//

M
Mr.doob 已提交
96
			function onDocumentMouseMove(event) {
M
Mr.doob 已提交
97

98 99
				mouseX = event.clientX - windowHalfX;
				mouseY = event.clientY - windowHalfY;
M
Mr.doob 已提交
100

M
Mr.doob 已提交
101
			}
M
Mr.doob 已提交
102

M
Mr.doob 已提交
103
			function onDocumentTouchStart(event) {
M
Mr.doob 已提交
104

M
Mr.doob 已提交
105
				if(event.touches.length == 1) {
M
Mr.doob 已提交
106

107 108 109 110
					event.preventDefault();

					mouseX = event.touches[0].pageX - windowHalfX;
					mouseY = event.touches[0].pageY - windowHalfY;
M
Mr.doob 已提交
111

112 113 114
				}
			}

M
Mr.doob 已提交
115
			function onDocumentTouchMove(event) {
M
Mr.doob 已提交
116

M
Mr.doob 已提交
117
				if(event.touches.length == 1) {
M
Mr.doob 已提交
118

119
					event.preventDefault();
M
Mr.doob 已提交
120

121 122
					mouseX = event.touches[0].pageX - windowHalfX;
					mouseY = event.touches[0].pageY - windowHalfY;
M
Mr.doob 已提交
123

124 125
				}
			}
M
Mr.doob 已提交
126

127
			//
M
Mr.doob 已提交
128

M
Mr.doob 已提交
129
			function loop() {
M
Mr.doob 已提交
130

M
Mr.doob 已提交
131 132
				camera.position.x += (mouseX - camera.position.x) * .05;
				camera.position.y += (-mouseY - camera.position.y) * .05;
M
Mr.doob 已提交
133 134 135

				var i = 0;

M
Mr.doob 已提交
136
				for (var ix = 0; ix < AMOUNTX; ix++) {
M
Mr.doob 已提交
137

M
Mr.doob 已提交
138
					for(var iy = 0; iy < AMOUNTY; iy++) {
M
Mr.doob 已提交
139

M
Mr.doob 已提交
140 141
						particle = particles[i++];
						particle.position.y = (Math.sin((ix + count) * .3) * 50) + (Math.sin((iy + count) * .5) * 50);
142
						particle.scale.x = particle.scale.y = (Math.sin((ix + count) * .3) + 1) * 2 + (Math.sin((iy + count) * .5) + 1) * 2;
M
Mr.doob 已提交
143

M
Mr.doob 已提交
144 145 146 147 148 149 150 151 152
					}
				}

				renderer.render(scene, camera);

				stats.update();

				count += 0.1;
			}
M
Mr.doob 已提交
153

M
Mr.doob 已提交
154 155 156
		</script>
	</body>
</html>