File size: 1,376 Bytes
2b7aae2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { LineSegments } from '../objects/LineSegments.js';
import { LineBasicMaterial } from '../materials/LineBasicMaterial.js';
import { Float32BufferAttribute } from '../core/BufferAttribute.js';
import { BufferGeometry } from '../core/BufferGeometry.js';
import { Color } from '../math/Color.js';

class GridHelper extends LineSegments {
	constructor(size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888) {
		color1 = new Color(color1);
		color2 = new Color(color2);

		const center = divisions / 2;
		const step = size / divisions;
		const halfSize = size / 2;

		const vertices = [],
			colors = [];

		for (let i = 0, j = 0, k = -halfSize; i <= divisions; i++, k += step) {
			vertices.push(-halfSize, 0, k, halfSize, 0, k);
			vertices.push(k, 0, -halfSize, k, 0, halfSize);

			const color = i === center ? color1 : color2;

			color.toArray(colors, j);
			j += 3;
			color.toArray(colors, j);
			j += 3;
			color.toArray(colors, j);
			j += 3;
			color.toArray(colors, j);
			j += 3;
		}

		const geometry = new BufferGeometry();
		geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3));
		geometry.setAttribute('color', new Float32BufferAttribute(colors, 3));

		const material = new LineBasicMaterial({ vertexColors: true, toneMapped: false });

		super(geometry, material);

		this.type = 'GridHelper';
	}
}

export { GridHelper };