@openglobus/og 0.12.4 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/dist/@openglobus/og.esm.js +2 -2
- package/dist/@openglobus/og.esm.js.map +1 -1
- package/dist/@openglobus/og.umd.js +2 -2
- package/dist/@openglobus/og.umd.js.map +1 -1
- package/package.json +7 -7
- package/src/og/Extent.js +3 -3
- package/src/og/Globe.js +277 -275
- package/src/og/ImageCanvas.js +3 -3
- package/src/og/LonLat.js +9 -9
- package/src/og/QueueArray.js +2 -2
- package/src/og/Rectangle.js +5 -5
- package/src/og/bv/Box.js +1 -1
- package/src/og/bv/Sphere.js +2 -2
- package/src/og/camera/Camera.js +1 -1
- package/src/og/camera/PlanetCamera.js +649 -646
- package/src/og/control/LayerSwitcher.js +1 -1
- package/src/og/control/MouseNavigation.js +22 -13
- package/src/og/control/MouseWheelZoomControl.js +2 -2
- package/src/og/control/ScaleControl.js +1 -1
- package/src/og/control/TouchNavigation.js +319 -319
- package/src/og/control/ZoomControl.js +132 -132
- package/src/og/control/visibleExtent/Segment.js +12 -12
- package/src/og/ellipsoid/Ellipsoid.js +577 -567
- package/src/og/entity/BillboardHandler.js +878 -1051
- package/src/og/entity/Entity.js +1 -1
- package/src/og/entity/EntityCollection.js +847 -857
- package/src/og/entity/GeoObjectHandler.js +2 -2
- package/src/og/entity/LabelHandler.js +887 -1040
- package/src/og/entity/LabelWorker.js +0 -6
- package/src/og/entity/PointCloud.js +495 -495
- package/src/og/entity/Polyline.js +2218 -2222
- package/src/og/entity/RayHandler.js +1 -1
- package/src/og/layer/CanvasTiles.js +6 -3
- package/src/og/layer/GeoImage.js +1 -1
- package/src/og/layer/KML.js +5 -5
- package/src/og/layer/Layer.js +800 -752
- package/src/og/layer/Vector.js +997 -1010
- package/src/og/layer/XYZ.js +359 -357
- package/src/og/math/Line2.js +4 -4
- package/src/og/math/Quat.js +2 -2
- package/src/og/math/Ray.js +2 -2
- package/src/og/math/Vec2.js +524 -524
- package/src/og/math/Vec3.js +900 -900
- package/src/og/math/Vec4.js +261 -261
- package/src/og/math.js +397 -398
- package/src/og/quadTree/EntityCollectionNode.js +389 -387
- package/src/og/renderer/Renderer.js +14 -20
- package/src/og/renderer/RendererEvents.js +1034 -1045
- package/src/og/scene/Planet.js +12 -9
- package/src/og/scene/RenderNode.js +347 -354
- package/src/og/segment/Segment.js +3 -1
- package/src/og/segment/SegmentLonLat.js +1 -4
- package/src/og/shaders/billboard.js +220 -204
- package/src/og/shaders/drawnode.js +607 -603
- package/src/og/shaders/label.js +576 -456
- package/src/og/shaders/polyline.js +365 -361
- package/src/og/terrain/MapboxTerrain.js +1 -1
- package/src/og/utils/FontAtlas.js +209 -200
- package/src/og/utils/GeoImageCreator.js +4 -5
- package/src/og/utils/TextureAtlas.js +4 -4
- package/src/og/utils/VectorTileCreator.js +414 -414
- package/src/og/utils/shared.js +1 -1
- package/src/og/webgl/Handler.js +28 -60
- package/src/og/webgl/Multisample.js +260 -260
- package/src/og/webgl/Program.js +411 -396
- package/types/bv/Box.d.ts +1 -1
- package/types/bv/Sphere.d.ts +1 -1
- package/types/camera/PlanetCamera.d.ts +3 -3
- package/types/control/LayerSwitcher.d.ts +1 -1
- package/types/ellipsoid/Ellipsoid.d.ts +9 -2
- package/types/entity/BillboardHandler.d.ts +0 -4
- package/types/entity/EntityCollection.d.ts +0 -8
- package/types/entity/LabelHandler.d.ts +0 -2
- package/types/entity/Polyline.d.ts +1 -1
- package/types/layer/KML.d.ts +11 -11
- package/types/layer/Layer.d.ts +4 -0
- package/types/layer/Vector.d.ts +1 -8
- package/types/math/Line2.d.ts +4 -4
- package/types/math/Ray.d.ts +2 -2
- package/types/math/Vec2.d.ts +1 -1
- package/types/math/Vec3.d.ts +1 -1
- package/types/math/Vec4.d.ts +2 -2
- package/types/math.d.ts +1 -1
- package/types/renderer/Renderer.d.ts +1 -1
- package/types/renderer/RendererEvents.d.ts +1 -1
- package/types/shaders/label.d.ts +1 -1
- package/types/utils/FontAtlas.d.ts +3 -2
- package/types/utils/TextureAtlas.d.ts +3 -3
- package/types/utils/VectorTileCreator.d.ts +4 -4
- package/types/utils/shared.d.ts +1 -1
- package/types/webgl/Handler.d.ts +6 -31
- package/types/webgl/Program.d.ts +2 -0
|
@@ -259,7 +259,7 @@ class Segment {
|
|
|
259
259
|
}
|
|
260
260
|
|
|
261
261
|
isEntityInside(e) {
|
|
262
|
-
return this.
|
|
262
|
+
return this._extentLonLat.isInside(e._lonlat);
|
|
263
263
|
}
|
|
264
264
|
|
|
265
265
|
/**
|
|
@@ -1479,7 +1479,9 @@ class Segment {
|
|
|
1479
1479
|
(li.minZoom <= p.maxCurrZoom || li.maxZoom <= p.maxCurrZoom)))
|
|
1480
1480
|
) {
|
|
1481
1481
|
notEmpty = true;
|
|
1482
|
+
|
|
1482
1483
|
var m = pm[li._id];
|
|
1484
|
+
|
|
1483
1485
|
if (!m) {
|
|
1484
1486
|
m = pm[li._id] = li.createMaterial(this);
|
|
1485
1487
|
}
|
|
@@ -40,6 +40,7 @@ class SegmentLonLat extends Segment {
|
|
|
40
40
|
// this._isNorth = false;
|
|
41
41
|
|
|
42
42
|
this._projection = EPSG4326;
|
|
43
|
+
|
|
43
44
|
this._extentMerc = new Extent(
|
|
44
45
|
extent.southWest.forwardMercatorEPS01(),
|
|
45
46
|
extent.northEast.forwardMercatorEPS01()
|
|
@@ -249,10 +250,6 @@ class SegmentLonLat extends Segment {
|
|
|
249
250
|
}
|
|
250
251
|
}
|
|
251
252
|
|
|
252
|
-
isEntityInside(e) {
|
|
253
|
-
return this._extent.isInside(e._lonlat);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
253
|
_getLayerExtentOffset(layer) {
|
|
257
254
|
var v0s = layer._extent;
|
|
258
255
|
var v0t = this._extent;
|
|
@@ -1,205 +1,221 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module og/shaders/billboard
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
'use strict';
|
|
6
|
-
|
|
7
|
-
import { Program } from '../webgl/Program.js';
|
|
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
|
-
attribute
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @module og/shaders/billboard
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
import { Program } from '../webgl/Program.js';
|
|
8
|
+
|
|
9
|
+
const PROJECT = `vec2 project(vec4 p) {
|
|
10
|
+
return (0.5 * p.xyz / p.w + 0.5).xy * viewport;
|
|
11
|
+
}`;
|
|
12
|
+
|
|
13
|
+
const ROTATE2D =
|
|
14
|
+
`mat2 rotate2d(float angle) {
|
|
15
|
+
return mat2(cos(angle), -sin(angle),
|
|
16
|
+
sin(angle), cos(angle));
|
|
17
|
+
}`;
|
|
18
|
+
|
|
19
|
+
export function billboardPicking() {
|
|
20
|
+
return new Program("billboardPicking", {
|
|
21
|
+
uniforms: {
|
|
22
|
+
viewport: "vec2",
|
|
23
|
+
projectionMatrix: "mat4",
|
|
24
|
+
viewMatrix: "mat4",
|
|
25
|
+
eyePositionHigh: "vec3",
|
|
26
|
+
eyePositionLow: "vec3",
|
|
27
|
+
planetRadius: "float",
|
|
28
|
+
uScaleByDistance: "vec3",
|
|
29
|
+
opacity: "float",
|
|
30
|
+
depthOffset: "float"
|
|
31
|
+
},
|
|
32
|
+
attributes: {
|
|
33
|
+
a_vertices: "vec2",
|
|
34
|
+
a_positionsHigh: "vec3",
|
|
35
|
+
a_positionsLow: "vec3",
|
|
36
|
+
a_offset: "vec3",
|
|
37
|
+
a_size: "vec2",
|
|
38
|
+
a_rotation: "float",
|
|
39
|
+
a_rgba: "vec4"
|
|
40
|
+
},
|
|
41
|
+
vertexShader:
|
|
42
|
+
`precision highp float;
|
|
43
|
+
attribute vec2 a_vertices;
|
|
44
|
+
attribute vec3 a_positionsHigh;
|
|
45
|
+
attribute vec3 a_positionsLow;
|
|
46
|
+
attribute vec3 a_offset;
|
|
47
|
+
attribute vec2 a_size;
|
|
48
|
+
attribute float a_rotation;
|
|
49
|
+
attribute vec4 a_rgba;
|
|
50
|
+
|
|
51
|
+
varying vec3 v_rgb;
|
|
52
|
+
|
|
53
|
+
uniform mat4 viewMatrix;
|
|
54
|
+
uniform mat4 projectionMatrix;
|
|
55
|
+
uniform vec3 eyePositionHigh;
|
|
56
|
+
uniform vec3 eyePositionLow;
|
|
57
|
+
uniform vec3 uScaleByDistance;
|
|
58
|
+
uniform float opacity;
|
|
59
|
+
uniform float planetRadius;
|
|
60
|
+
uniform vec2 viewport;
|
|
61
|
+
uniform float depthOffset;
|
|
62
|
+
|
|
63
|
+
const vec3 ZERO3 = vec3(0.0);
|
|
64
|
+
|
|
65
|
+
${PROJECT}
|
|
66
|
+
|
|
67
|
+
${ROTATE2D}
|
|
68
|
+
|
|
69
|
+
void main() {
|
|
70
|
+
|
|
71
|
+
vec3 a_positions = a_positionsHigh + a_positionsLow;
|
|
72
|
+
vec3 cameraPos = eyePositionHigh + eyePositionLow;
|
|
73
|
+
|
|
74
|
+
vec3 look = a_positions - cameraPos;
|
|
75
|
+
float lookDist = length(look);
|
|
76
|
+
v_rgb = a_rgba.rgb;
|
|
77
|
+
|
|
78
|
+
if(opacity * step(lookDist, sqrt(dot(cameraPos,cameraPos) - planetRadius) + sqrt(dot(a_positions,a_positions) - planetRadius)) == 0.0){
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
vec3 up = vec3( viewMatrix[0][1], viewMatrix[1][1], viewMatrix[2][1] );
|
|
83
|
+
vec3 right = vec3( viewMatrix[0][0], viewMatrix[1][0], viewMatrix[2][0] );
|
|
84
|
+
|
|
85
|
+
float scd = (1.0 - smoothstep(uScaleByDistance[0], uScaleByDistance[1], lookDist)) * (1.0 - step(uScaleByDistance[2], lookDist));
|
|
86
|
+
|
|
87
|
+
mat4 viewMatrixRTE = viewMatrix;
|
|
88
|
+
viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
|
|
89
|
+
|
|
90
|
+
vec3 highDiff = a_positionsHigh - eyePositionHigh;
|
|
91
|
+
vec3 lowDiff = a_positionsLow - eyePositionLow;
|
|
92
|
+
vec4 posRTE = viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
|
|
93
|
+
vec4 projPos = projectionMatrix * posRTE;
|
|
94
|
+
|
|
95
|
+
projPos.z += depthOffset + a_offset.z;
|
|
96
|
+
|
|
97
|
+
vec2 screenPos = project(projPos);
|
|
98
|
+
|
|
99
|
+
vec2 v = screenPos + rotate2d(a_rotation) * (a_vertices * a_size * scd + a_offset.xy);
|
|
100
|
+
|
|
101
|
+
gl_Position = vec4((2.0 * v / viewport - 1.0) * projPos.w, projPos.z, projPos.w);
|
|
102
|
+
}`,
|
|
103
|
+
fragmentShader:
|
|
104
|
+
`precision highp float;
|
|
105
|
+
varying vec3 v_rgb;
|
|
106
|
+
void main () {
|
|
107
|
+
gl_FragColor = vec4(v_rgb, 1.0);
|
|
108
|
+
}`
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function billboard_screen() {
|
|
113
|
+
return new Program("billboard", {
|
|
114
|
+
uniforms: {
|
|
115
|
+
viewport: "vec2",
|
|
116
|
+
u_texture: "sampler2d",
|
|
117
|
+
projectionMatrix: "mat4",
|
|
118
|
+
viewMatrix: "mat4",
|
|
119
|
+
eyePositionHigh: "vec3",
|
|
120
|
+
eyePositionLow: "vec3",
|
|
121
|
+
planetRadius: "float",
|
|
122
|
+
uScaleByDistance: "vec3",
|
|
123
|
+
opacity: "float",
|
|
124
|
+
depthOffset: "float"
|
|
125
|
+
},
|
|
126
|
+
attributes: {
|
|
127
|
+
a_vertices: "vec2",
|
|
128
|
+
a_texCoord: "vec2",
|
|
129
|
+
a_positionsHigh: "vec3",
|
|
130
|
+
a_positionsLow: "vec3",
|
|
131
|
+
a_offset: "vec3",
|
|
132
|
+
a_size: "vec2",
|
|
133
|
+
a_rotation: "float",
|
|
134
|
+
a_rgba: "vec4",
|
|
135
|
+
},
|
|
136
|
+
vertexShader:
|
|
137
|
+
`precision highp float;
|
|
138
|
+
attribute vec2 a_vertices;
|
|
139
|
+
attribute vec2 a_texCoord;
|
|
140
|
+
attribute vec3 a_positionsHigh;
|
|
141
|
+
attribute vec3 a_positionsLow;
|
|
142
|
+
attribute vec3 a_offset;
|
|
143
|
+
attribute vec2 a_size;
|
|
144
|
+
attribute float a_rotation;
|
|
145
|
+
attribute vec4 a_rgba;
|
|
146
|
+
|
|
147
|
+
varying vec2 v_texCoords;
|
|
148
|
+
varying vec4 v_rgba;
|
|
149
|
+
|
|
150
|
+
uniform mat4 viewMatrix;
|
|
151
|
+
uniform mat4 projectionMatrix;
|
|
152
|
+
uniform vec3 eyePositionHigh;
|
|
153
|
+
uniform vec3 eyePositionLow;
|
|
154
|
+
uniform vec3 uScaleByDistance;
|
|
155
|
+
uniform float opacity;
|
|
156
|
+
uniform float planetRadius;
|
|
157
|
+
uniform vec2 viewport;
|
|
158
|
+
uniform float depthOffset;
|
|
159
|
+
|
|
160
|
+
const vec3 ZERO3 = vec3(0.0);
|
|
161
|
+
|
|
162
|
+
${PROJECT}
|
|
163
|
+
|
|
164
|
+
${ROTATE2D}
|
|
165
|
+
|
|
166
|
+
void main() {
|
|
167
|
+
|
|
168
|
+
vec3 a_positions = a_positionsHigh + a_positionsLow;
|
|
169
|
+
vec3 cameraPos = eyePositionHigh + eyePositionLow;
|
|
170
|
+
|
|
171
|
+
v_texCoords = a_texCoord;
|
|
172
|
+
vec3 look = a_positions - cameraPos;
|
|
173
|
+
float lookDist = length(look);
|
|
174
|
+
v_rgba = a_rgba;
|
|
175
|
+
|
|
176
|
+
if(opacity * step(lookDist, sqrt(dot(cameraPos,cameraPos) - planetRadius) + sqrt(dot(a_positions,a_positions) - planetRadius)) == 0.0){
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
vec3 up = vec3( viewMatrix[0][1], viewMatrix[1][1], viewMatrix[2][1] );
|
|
181
|
+
vec3 right = vec3( viewMatrix[0][0], viewMatrix[1][0], viewMatrix[2][0] );
|
|
182
|
+
|
|
183
|
+
float scd = (1.0 - smoothstep(uScaleByDistance[0], uScaleByDistance[1], lookDist)) * (1.0 - step(uScaleByDistance[2], lookDist));
|
|
184
|
+
|
|
185
|
+
mat4 viewMatrixRTE = viewMatrix;
|
|
186
|
+
viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
|
|
187
|
+
|
|
188
|
+
vec3 highDiff = a_positionsHigh - eyePositionHigh;
|
|
189
|
+
vec3 lowDiff = a_positionsLow - eyePositionLow;
|
|
190
|
+
vec4 posRTE = viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
|
|
191
|
+
vec4 projPos = projectionMatrix * posRTE;
|
|
192
|
+
|
|
193
|
+
float camSlope = dot(vec3(viewMatrix[0][2], viewMatrix[1][2], viewMatrix[2][2]), normalize(cameraPos));
|
|
194
|
+
if(camSlope > 0.5) {
|
|
195
|
+
float dist = dot(look, normalize(cameraPos));
|
|
196
|
+
projPos.z += dist * 0.02;
|
|
197
|
+
}else{
|
|
198
|
+
projPos.z += -(abs(projPos.z)) * 0.002;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
projPos.z += depthOffset + a_offset.z;
|
|
202
|
+
|
|
203
|
+
vec2 screenPos = project(projPos);
|
|
204
|
+
|
|
205
|
+
vec2 v = screenPos + rotate2d(a_rotation) * (a_vertices * a_size * scd + a_offset.xy);
|
|
206
|
+
|
|
207
|
+
gl_Position = vec4((2.0 * v / viewport - 1.0) * projPos.w, projPos.z, projPos.w);
|
|
208
|
+
}`,
|
|
209
|
+
fragmentShader:
|
|
210
|
+
`precision highp float;
|
|
211
|
+
uniform sampler2D u_texture;
|
|
212
|
+
varying vec2 v_texCoords;
|
|
213
|
+
varying vec4 v_rgba;
|
|
214
|
+
void main () {
|
|
215
|
+
vec4 color = texture2D(u_texture, v_texCoords);
|
|
216
|
+
if(color.a < 0.1)
|
|
217
|
+
discard;
|
|
218
|
+
gl_FragColor = color * v_rgba;
|
|
219
|
+
}`
|
|
220
|
+
});
|
|
205
221
|
}
|