webgl_buffergeometry_lines.html 3.3 KB
Newer Older
M
Mr.doob 已提交
1 2 3
<!DOCTYPE html>
<html lang="en">
	<head>
M
r66  
Mr.doob 已提交
4
		<title>three.js webgl - buffergeometry - lines</title>
M
Mr.doob 已提交
5 6
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
M
r105  
Mr.doob 已提交
7
		<link type="text/css" rel="stylesheet" href="main.css">
M
Mr.doob 已提交
8 9 10 11
	</head>
	<body>

		<div id="container"></div>
M
r113  
Mr.doob 已提交
12
		<div id="info"><a href="https://threejs.org" target="_blank" rel="noopener">three.js</a> webgl - buffergeometry - lines</div>
M
Mr.doob 已提交
13

M
r106  
Mr.doob 已提交
14
		<script type="module">
M
Mr.doob 已提交
15

M
r106  
Mr.doob 已提交
16
			import * as THREE from '../build/three.module.js';
M
Mr.doob 已提交
17

M
r106  
Mr.doob 已提交
18
			import Stats from './jsm/libs/stats.module.js';
M
r117  
Mr.doob 已提交
19

M
r122  
Mr.doob 已提交
20
			let container, stats, clock;
M
Mr.doob 已提交
21

M
r122  
Mr.doob 已提交
22
			let camera, scene, renderer;
M
Mr.doob 已提交
23

M
r122  
Mr.doob 已提交
24
			let line;
M
Mr.doob 已提交
25

M
r122  
Mr.doob 已提交
26 27 28
			const segments = 10000;
			const r = 800;
			let t = 0;
M
r117  
Mr.doob 已提交
29

M
Mr.doob 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43
			init();
			animate();

			function init() {

				container = document.getElementById( 'container' );

				//

				camera = new THREE.PerspectiveCamera( 27, window.innerWidth / window.innerHeight, 1, 4000 );
				camera.position.z = 2750;

				scene = new THREE.Scene();

M
r117  
Mr.doob 已提交
44
				clock = new THREE.Clock();
M
Mr.doob 已提交
45

M
r122  
Mr.doob 已提交
46
				const geometry = new THREE.BufferGeometry();
M
r131  
Mr.doob 已提交
47
				const material = new THREE.LineBasicMaterial( { vertexColors: true } );
M
Mr.doob 已提交
48

M
r122  
Mr.doob 已提交
49 50
				const positions = [];
				const colors = [];
M
Mr.doob 已提交
51

M
r122  
Mr.doob 已提交
52
				for ( let i = 0; i < segments; i ++ ) {
M
Mr.doob 已提交
53

M
r122  
Mr.doob 已提交
54 55 56
					const x = Math.random() * r - r / 2;
					const y = Math.random() * r - r / 2;
					const z = Math.random() * r - r / 2;
M
Mr.doob 已提交
57 58 59

					// positions

M
r88  
Mr.doob 已提交
60
					positions.push( x, y, z );
M
Mr.doob 已提交
61 62 63

					// colors

M
r88  
Mr.doob 已提交
64 65 66
					colors.push( ( x / r ) + 0.5 );
					colors.push( ( y / r ) + 0.5 );
					colors.push( ( z / r ) + 0.5 );
M
Mr.doob 已提交
67 68 69

				}

M
r110  
Mr.doob 已提交
70 71
				geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( positions, 3 ) );
				geometry.setAttribute( 'color', new THREE.Float32BufferAttribute( colors, 3 ) );
M
r117  
Mr.doob 已提交
72
				generateMorphTargets( geometry );
M
r68  
Mr.doob 已提交
73

M
Mr.doob 已提交
74 75
				geometry.computeBoundingSphere();

M
r105  
Mr.doob 已提交
76 77
				line = new THREE.Line( geometry, material );
				scene.add( line );
M
Mr.doob 已提交
78 79 80

				//

M
r91  
Mr.doob 已提交
81
				renderer = new THREE.WebGLRenderer();
M
r70  
Mr.doob 已提交
82
				renderer.setPixelRatio( window.devicePixelRatio );
M
Mr.doob 已提交
83
				renderer.setSize( window.innerWidth, window.innerHeight );
M
r112  
Mr.doob 已提交
84
				renderer.outputEncoding = THREE.sRGBEncoding;
M
Mr.doob 已提交
85 86 87 88 89 90

				container.appendChild( renderer.domElement );

				//

				stats = new Stats();
M
r76  
Mr.doob 已提交
91
				container.appendChild( stats.dom );
M
Mr.doob 已提交
92 93 94

				//

M
r125  
Mr.doob 已提交
95
				window.addEventListener( 'resize', onWindowResize );
M
Mr.doob 已提交
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120

			}

			function onWindowResize() {

				camera.aspect = window.innerWidth / window.innerHeight;
				camera.updateProjectionMatrix();

				renderer.setSize( window.innerWidth, window.innerHeight );

			}

			//

			function animate() {

				requestAnimationFrame( animate );

				render();
				stats.update();

			}

			function render() {

M
r122  
Mr.doob 已提交
121 122
				const delta = clock.getDelta();
				const time = clock.getElapsedTime();
M
Mr.doob 已提交
123

M
r105  
Mr.doob 已提交
124 125
				line.rotation.x = time * 0.25;
				line.rotation.y = time * 0.5;
M
Mr.doob 已提交
126

M
r131  
Mr.doob 已提交
127 128
				t += delta * 0.5;
				line.morphTargetInfluences[ 0 ] = Math.abs( Math.sin( t ) );
M
r117  
Mr.doob 已提交
129

M
Mr.doob 已提交
130 131 132 133
				renderer.render( scene, camera );

			}

M
r117  
Mr.doob 已提交
134 135
			function generateMorphTargets( geometry ) {

M
r122  
Mr.doob 已提交
136
				const data = [];
M
r117  
Mr.doob 已提交
137

M
r122  
Mr.doob 已提交
138
				for ( let i = 0; i < segments; i ++ ) {
M
r117  
Mr.doob 已提交
139

M
r122  
Mr.doob 已提交
140 141 142
					const x = Math.random() * r - r / 2;
					const y = Math.random() * r - r / 2;
					const z = Math.random() * r - r / 2;
M
r117  
Mr.doob 已提交
143 144 145 146 147

					data.push( x, y, z );

				}

M
r122  
Mr.doob 已提交
148
				const morphTarget = new THREE.Float32BufferAttribute( data, 3 );
M
r117  
Mr.doob 已提交
149 150 151 152 153 154
				morphTarget.name = 'target1';

				geometry.morphAttributes.position = [ morphTarget ];

			}

M
Mr.doob 已提交
155 156 157 158
		</script>

	</body>
</html>