-
-
Notifications
You must be signed in to change notification settings - Fork 35.7k
/
Copy pathPointsMaterial.js
139 lines (115 loc) · 3.36 KB
/
PointsMaterial.js
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import { Material } from './Material.js';
import { Color } from '../math/Color.js';
/**
* A material for rendering point primitives.
*
* Materials define the appearance of renderable 3D objects.
*
* ```js
* const vertices = [];
*
* for ( let i = 0; i < 10000; i ++ ) {
* const x = THREE.MathUtils.randFloatSpread( 2000 );
* const y = THREE.MathUtils.randFloatSpread( 2000 );
* const z = THREE.MathUtils.randFloatSpread( 2000 );
*
* vertices.push( x, y, z );
* }
*
* const geometry = new THREE.BufferGeometry();
* geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( vertices, 3 ) );
* const material = new THREE.PointsMaterial( { color: 0x888888 } );
* const points = new THREE.Points( geometry, material );
* scene.add( points );
* ```
*
* @augments Material
*/
class PointsMaterial extends Material {
/**
* Constructs a new points material.
*
* @param {Object} [parameters] - An object with one or more properties
* defining the material's appearance. Any property of the material
* (including any property from inherited materials) can be passed
* in here. Color values can be passed any type of value accepted
* by {@link Color#set}.
*/
constructor( parameters ) {
super();
/**
* This flag can be used for type testing.
*
* @type {boolean}
* @readonly
* @default true
*/
this.isPointsMaterial = true;
this.type = 'PointsMaterial';
/**
* Color of the material.
*
* @type {Color}
* @default (1,1,1)
*/
this.color = new Color( 0xffffff );
/**
* The color map. May optionally include an alpha channel, typically combined
* with {@link Material#transparent} or {@link Material#alphaTest}. The texture map
* color is modulated by the diffuse `color`.
*
* @type {?Texture}
* @default null
*/
this.map = null;
/**
* The alpha map is a grayscale texture that controls the opacity across the
* surface (black: fully transparent; white: fully opaque).
*
* Only the color of the texture is used, ignoring the alpha channel if one
* exists. For RGB and RGBA textures, the renderer will use the green channel
* when sampling this texture due to the extra bit of precision provided for
* green in DXT-compressed and uncompressed RGB 565 formats. Luminance-only and
* luminance/alpha textures will also still work as expected.
*
* @type {?Texture}
* @default null
*/
this.alphaMap = null;
/**
* Defines the size of the points in pixels.
*
* Might be capped if the value exceeds hardware dependent parameters like [gl.ALIASED_POINT_SIZE_RANGE]{@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/getParamete}.
*
* @type {number}
* @default 1
*/
this.size = 1;
/**
* Specifies whether size of individual points is attenuated by the camera depth (perspective camera only).
*
* @type {boolean}
* @default true
*/
this.sizeAttenuation = true;
/**
* Whether the material is affected by fog or not.
*
* @type {boolean}
* @default true
*/
this.fog = true;
this.setValues( parameters );
}
copy( source ) {
super.copy( source );
this.color.copy( source.color );
this.map = source.map;
this.alphaMap = source.alphaMap;
this.size = source.size;
this.sizeAttenuation = source.sizeAttenuation;
this.fog = source.fog;
return this;
}
}
export { PointsMaterial };