@openglobus/og 0.15.1 → 0.15.3
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 +10 -4
- package/css/og.css +44 -45
- package/dist/@openglobus/og.css +1 -1
- 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 +12 -12
- package/src/og/Clock.js +1 -1
- package/src/og/Events.js +1 -1
- package/src/og/Extent.js +1 -1
- package/src/og/Globe.js +3 -5
- package/src/og/Popup.js +38 -63
- package/src/og/astro/earth.js +2 -2
- package/src/og/astro/rotation.js +2 -2
- package/src/og/bv/Box.js +1 -0
- package/src/og/bv/index.js +1 -1
- package/src/og/camera/Camera.js +4 -4
- package/src/og/camera/PlanetCamera.js +26 -6
- package/src/og/camera/index.js +1 -1
- package/src/og/control/Atmosphere.js +3 -8
- package/src/og/control/CompassButton.js +4 -5
- package/src/og/control/EarthCoordinates.js +3 -2
- package/src/og/control/EarthNavigation.js +0 -1
- package/src/og/control/GeoImageDragControl.js +2 -2
- package/src/og/control/KeyboardNavigation.js +3 -2
- package/src/og/control/LayerAnimation.js +2 -2
- package/src/og/control/LayerSwitcher.js +5 -4
- package/src/og/control/Lighting.js +106 -35
- package/src/og/control/MouseNavigation.js +4 -4
- package/src/og/control/MouseWheelZoomControl.js +2 -2
- package/src/og/control/RulerSwitcher.js +4 -3
- package/src/og/control/ScaleControl.js +2 -2
- package/src/og/control/ShowFps.js +2 -1
- package/src/og/control/SimpleNavigation.js +2 -1
- package/src/og/control/SimpleSkyBackground.js +2 -2
- package/src/og/control/Sun.js +8 -1
- package/src/og/control/ToggleWireframe.js +2 -1
- package/src/og/control/TouchNavigation.js +4 -3
- package/src/og/control/ZoomControl.js +6 -5
- package/src/og/control/index.js +10 -10
- package/src/og/control/ruler/RulerScene.js +19 -11
- package/src/og/control/selection/Selection.js +1 -1
- package/src/og/control/selection/SelectionScene.js +5 -8
- package/src/og/control/timeline/TimelineControl.js +3 -4
- package/src/og/control/timeline/TimelineModel.js +2 -2
- package/src/og/control/timeline/TimelineView.js +10 -5
- package/src/og/control/visibleExtent/Segment.js +5 -5
- package/src/og/control/visibleExtent/VisibleExtent.js +1 -1
- package/src/og/ellipsoid/Ellipsoid.js +3 -3
- package/src/og/entity/BaseBillboard.js +2 -2
- package/src/og/entity/BillboardHandler.js +10 -2
- package/src/og/entity/Entity.js +10 -51
- package/src/og/entity/EntityCollection.js +3 -20
- package/src/og/entity/GeoObject.js +2 -4
- package/src/og/entity/GeoObjectHandler.js +12 -11
- package/src/og/entity/Geometry.js +2 -2
- package/src/og/entity/GeometryHandler.js +2 -2
- package/src/og/entity/Label.js +2 -2
- package/src/og/entity/LabelHandler.js +7 -5
- package/src/og/entity/Polyline.js +8 -7
- package/src/og/entity/Ray.js +1 -2
- package/src/og/entity/RayHandler.js +4 -0
- package/src/og/entity/Strip.js +8 -5
- package/src/og/entity/index.js +1 -1
- package/src/og/index.core.js +4 -4
- package/src/og/index.js +4 -4
- package/src/og/index.webgl.js +3 -3
- package/src/og/layer/BaseGeoImage.js +2 -2
- package/src/og/layer/GeoImage.js +2 -2
- package/src/og/layer/GeoTexture2d.js +1 -1
- package/src/og/layer/Layer.js +3 -3
- package/src/og/layer/Vector.js +7 -11
- package/src/og/layer/WMS.js +2 -1
- package/src/og/layer/XYZ.js +2 -4
- package/src/og/math/Line3.js +0 -1
- package/src/og/math/Plane.js +0 -1
- package/src/og/math/Ray.js +0 -1
- package/src/og/math/Vec2.js +62 -62
- package/src/og/math/Vec3.js +1 -1
- package/src/og/math/Vec4.js +1 -1
- package/src/og/math/index.js +1 -1
- package/src/og/proj/EPSG3857.js +1 -1
- package/src/og/proj/EPSG4326.js +1 -1
- package/src/og/quadTree/EarthQuadTreeStrategy.js +4 -4
- package/src/og/quadTree/MarsQuadTreeStrategy.js +4 -4
- package/src/og/quadTree/Node.js +1 -1
- package/src/og/quadTree/Wgs84QuadTreeStrategy.js +4 -4
- package/src/og/quadTree/index.js +2 -2
- package/src/og/renderer/Renderer.js +196 -77
- package/src/og/renderer/RendererEvents.js +35 -10
- package/src/og/scene/Axes.js +2 -2
- package/src/og/scene/Planet.js +47 -75
- package/src/og/scene/RenderNode.js +2 -13
- package/src/og/scene/SkyBox.js +1 -1
- package/src/og/scene/index.js +2 -2
- package/src/og/segment/Segment.js +5 -5
- package/src/og/segment/SegmentLonLatWgs84.js +2 -3
- package/src/og/shaders/drawnode.js +5 -1
- package/src/og/shaders/geoObject.js +2 -6
- package/src/og/shaders/pickingMask.js +31 -0
- package/src/og/shaders/polyline.js +212 -212
- package/src/og/terrain/BilTerrain.js +4 -4
- package/src/og/terrain/GlobusTerrain.js +7 -7
- package/src/og/terrain/MapboxTerrain.js +2 -2
- package/src/og/terrain/index.js +2 -2
- package/src/og/ui/Button.js +5 -4
- package/src/og/ui/Dialog.js +3 -6
- package/src/og/ui/Slider.js +29 -3
- package/src/og/ui/View.js +5 -5
- package/src/og/ui/icons.js +3 -0
- package/src/og/utils/FontAtlas.js +2 -2
- package/src/og/utils/GeoImageCreator.js +0 -1
- package/src/og/utils/NormalMapCreator.js +6 -5
- package/src/og/utils/TerrainWorker.js +1 -1
- package/src/og/utils/VectorTileCreator.js +4 -4
- package/src/og/utils/shared.js +1 -1
- package/src/og/webgl/Framebuffer.js +3 -1
- package/src/og/webgl/Handler.js +77 -62
- package/src/og/webgl/Multisample.js +18 -7
- package/src/og/webgl/Program.js +2 -2
- package/src/og/webgl/index.js +2 -2
- package/types/Popup.d.ts +8 -21
- package/types/camera/PlanetCamera.d.ts +1 -0
- package/types/control/Sun.d.ts +1 -0
- package/types/control/ruler/RulerScene.d.ts +4 -3
- package/types/entity/Entity.d.ts +2 -19
- package/types/entity/EntityCollection.d.ts +0 -7
- package/types/math/Vec2.d.ts +95 -95
- package/types/renderer/Renderer.d.ts +28 -16
- package/types/scene/Planet.d.ts +2 -7
- package/types/shaders/pickingMask.d.ts +2 -0
- package/types/ui/Slider.d.ts +3 -0
- package/types/ui/View.d.ts +1 -0
- package/types/ui/icons.d.ts +1 -0
- package/types/webgl/Framebuffer.d.ts +1 -0
- package/types/webgl/Handler.d.ts +3 -2
- package/src/og/entity/ShapeHandler.js +0 -99
- package/src/og/shaders/shape.js +0 -135
- package/src/og/shapes/BaseShape.js +0 -557
- package/src/og/shapes/Icosphere.js +0 -179
- package/src/og/shapes/Sphere.js +0 -100
- package/types/entity/ShapeHandler.d.ts +0 -22
- package/types/shaders/shape.d.ts +0 -4
- package/types/shapes/BaseShape.d.ts +0 -250
- package/types/shapes/Sphere.d.ts +0 -41
|
@@ -6,6 +6,188 @@
|
|
|
6
6
|
|
|
7
7
|
import { Program } from '../webgl/Program.js';
|
|
8
8
|
|
|
9
|
+
export function polyline_screen() {
|
|
10
|
+
return new Program("polyline_screen", {
|
|
11
|
+
uniforms: {
|
|
12
|
+
viewport: "vec2",
|
|
13
|
+
proj: "mat4",
|
|
14
|
+
view: "mat4",
|
|
15
|
+
eyePositionHigh: "vec3",
|
|
16
|
+
eyePositionLow: "vec3",
|
|
17
|
+
uFloatParams: "vec2",
|
|
18
|
+
thickness: "float",
|
|
19
|
+
opacity: "float",
|
|
20
|
+
depthOffset: "float"
|
|
21
|
+
},
|
|
22
|
+
attributes: {
|
|
23
|
+
prevHigh: "vec3",
|
|
24
|
+
currentHigh: "vec3",
|
|
25
|
+
nextHigh: "vec3",
|
|
26
|
+
|
|
27
|
+
prevLow: "vec3",
|
|
28
|
+
currentLow: "vec3",
|
|
29
|
+
nextLow: "vec3",
|
|
30
|
+
|
|
31
|
+
order: "float",
|
|
32
|
+
|
|
33
|
+
color: "vec4"
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
vertexShader:
|
|
37
|
+
`precision highp float;
|
|
38
|
+
|
|
39
|
+
attribute vec3 prevHigh;
|
|
40
|
+
attribute vec3 currentHigh;
|
|
41
|
+
attribute vec3 nextHigh;
|
|
42
|
+
|
|
43
|
+
attribute vec3 prevLow;
|
|
44
|
+
attribute vec3 currentLow;
|
|
45
|
+
attribute vec3 nextLow;
|
|
46
|
+
|
|
47
|
+
attribute float order;
|
|
48
|
+
|
|
49
|
+
attribute vec4 color;
|
|
50
|
+
|
|
51
|
+
uniform float thickness;
|
|
52
|
+
uniform mat4 proj;
|
|
53
|
+
uniform mat4 view;
|
|
54
|
+
uniform vec2 viewport;
|
|
55
|
+
uniform vec3 eyePositionHigh;
|
|
56
|
+
uniform vec3 eyePositionLow;
|
|
57
|
+
uniform float opacity;
|
|
58
|
+
uniform float depthOffset;
|
|
59
|
+
|
|
60
|
+
varying vec4 vColor;
|
|
61
|
+
varying vec3 vPos;
|
|
62
|
+
varying vec3 uCamPos;
|
|
63
|
+
|
|
64
|
+
const float NEAR = -1.0;
|
|
65
|
+
|
|
66
|
+
vec2 getIntersection(vec2 start1, vec2 end1, vec2 start2, vec2 end2){
|
|
67
|
+
vec2 dir = end2 - start2;
|
|
68
|
+
vec2 perp = vec2(-dir.y, dir.x);
|
|
69
|
+
float d2 = dot(perp, start2);
|
|
70
|
+
float seg = dot(perp, start1) - d2;
|
|
71
|
+
float prl = seg - dot(perp, end1) + d2;
|
|
72
|
+
if(prl > -1.0 && prl < 1.0){
|
|
73
|
+
return start1;
|
|
74
|
+
}
|
|
75
|
+
float u = seg / prl;
|
|
76
|
+
return start1 + u * (end1 - start1);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
vec2 project(vec4 p){
|
|
80
|
+
return (0.5 * p.xyz / p.w + 0.5).xy * viewport;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
void main(){
|
|
84
|
+
|
|
85
|
+
uCamPos = eyePositionHigh + eyePositionLow;
|
|
86
|
+
|
|
87
|
+
vColor = vec4(color.rgb, color.a * opacity);
|
|
88
|
+
|
|
89
|
+
vec3 current = currentHigh + currentLow;
|
|
90
|
+
|
|
91
|
+
vPos = current;
|
|
92
|
+
|
|
93
|
+
mat4 viewMatrixRTE = view;
|
|
94
|
+
viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
|
|
95
|
+
|
|
96
|
+
vec3 highDiff, lowDiff;
|
|
97
|
+
|
|
98
|
+
highDiff = currentHigh - eyePositionHigh;
|
|
99
|
+
lowDiff = currentLow - eyePositionLow;
|
|
100
|
+
vec4 vCurrent = viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
|
|
101
|
+
|
|
102
|
+
highDiff = prevHigh - eyePositionHigh;
|
|
103
|
+
lowDiff = prevLow - eyePositionLow;
|
|
104
|
+
vec4 vPrev = viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
|
|
105
|
+
|
|
106
|
+
highDiff = nextHigh - eyePositionHigh;
|
|
107
|
+
lowDiff = nextLow - eyePositionLow;
|
|
108
|
+
vec4 vNext = viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
|
|
109
|
+
|
|
110
|
+
/*Clip near plane, the point behind view plane*/
|
|
111
|
+
if(vCurrent.z > NEAR) {
|
|
112
|
+
if(vPrev.z < NEAR && abs(order) == 1.0){
|
|
113
|
+
vCurrent = vPrev + (vCurrent - vPrev) * (NEAR - vPrev.z) / (vCurrent.z - vPrev.z);
|
|
114
|
+
} else if(vNext.z < NEAR && abs(order) == 2.0){
|
|
115
|
+
vCurrent = vNext + (vCurrent - vNext) * (NEAR - vNext.z) / (vCurrent.z - vNext.z);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
vec4 dCurrent = proj * vCurrent;
|
|
120
|
+
vec2 _next = project(proj * vNext);
|
|
121
|
+
vec2 _prev = project(proj * vPrev);
|
|
122
|
+
vec2 _current = project(dCurrent);
|
|
123
|
+
|
|
124
|
+
if(_prev == _current){
|
|
125
|
+
if(_next == _current){
|
|
126
|
+
_next = _current + vec2(1.0, 0.0);
|
|
127
|
+
_prev = _current - _next;
|
|
128
|
+
}else{
|
|
129
|
+
_prev = _current + normalize(_current - _next);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if(_next == _current){
|
|
134
|
+
_next = _current + normalize(_current - _prev);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
vec2 sNext = _next,
|
|
138
|
+
sCurrent = _current,
|
|
139
|
+
sPrev = _prev;
|
|
140
|
+
|
|
141
|
+
vec2 dirNext = normalize(sNext - sCurrent);
|
|
142
|
+
vec2 dirPrev = normalize(sPrev - sCurrent);
|
|
143
|
+
float dotNP = dot(dirNext, dirPrev);
|
|
144
|
+
|
|
145
|
+
vec2 normalNext = normalize(vec2(-dirNext.y, dirNext.x));
|
|
146
|
+
vec2 normalPrev = normalize(vec2(dirPrev.y, -dirPrev.x));
|
|
147
|
+
|
|
148
|
+
float d = thickness * sign(order);
|
|
149
|
+
|
|
150
|
+
vec2 m;
|
|
151
|
+
if(dotNP >= 0.99991){
|
|
152
|
+
m = sCurrent - normalPrev * d;
|
|
153
|
+
}else{
|
|
154
|
+
m = getIntersection( sCurrent + normalPrev * d, sPrev + normalPrev * d,
|
|
155
|
+
sCurrent + normalNext * d, sNext + normalNext * d );
|
|
156
|
+
|
|
157
|
+
if( dotNP > 0.5 && dot(dirNext + dirPrev, m - sCurrent) < 0.0 ){
|
|
158
|
+
float occw = order * sign(dirNext.x * dirPrev.y - dirNext.y * dirPrev.x);
|
|
159
|
+
if(occw == -1.0){
|
|
160
|
+
m = sCurrent + normalPrev * d;
|
|
161
|
+
}else if(occw == 1.0){
|
|
162
|
+
m = sCurrent + normalNext * d;
|
|
163
|
+
}else if(occw == -2.0){
|
|
164
|
+
m = sCurrent + normalNext * d;
|
|
165
|
+
}else if(occw == 2.0){
|
|
166
|
+
m = sCurrent + normalPrev * d;
|
|
167
|
+
}
|
|
168
|
+
}else if(distance(sCurrent, m) > min(distance(sCurrent, sNext), distance(sCurrent, sPrev))){
|
|
169
|
+
m = sCurrent + normalNext * d;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
gl_Position = vec4((2.0 * m / viewport - 1.0) * dCurrent.w, dCurrent.z + depthOffset, dCurrent.w);
|
|
174
|
+
}`,
|
|
175
|
+
|
|
176
|
+
fragmentShader:
|
|
177
|
+
`precision highp float;
|
|
178
|
+
uniform vec2 uFloatParams;
|
|
179
|
+
varying vec3 uCamPos;
|
|
180
|
+
varying vec4 vColor;
|
|
181
|
+
varying vec3 vPos;
|
|
182
|
+
void main() {
|
|
183
|
+
vec3 look = vPos - uCamPos;
|
|
184
|
+
float lookLength = length(look);
|
|
185
|
+
float a = vColor.a * step(lookLength, sqrt(dot(uCamPos,uCamPos) - uFloatParams[0]) + sqrt(dot(vPos,vPos) - uFloatParams[0]));
|
|
186
|
+
gl_FragColor = vec4(vColor.rgb, a);
|
|
187
|
+
}`
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
9
191
|
// export function polyline_screen() {
|
|
10
192
|
// return new Program("polyline_screen", {
|
|
11
193
|
// uniforms: {
|
|
@@ -34,19 +216,21 @@ import { Program } from '../webgl/Program.js';
|
|
|
34
216
|
// },
|
|
35
217
|
//
|
|
36
218
|
// vertexShader:
|
|
37
|
-
//
|
|
219
|
+
// `#version 300 es
|
|
38
220
|
//
|
|
39
|
-
//
|
|
40
|
-
// attribute vec3 currentHigh;
|
|
41
|
-
// attribute vec3 nextHigh;
|
|
221
|
+
// precision highp float;
|
|
42
222
|
//
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
223
|
+
// in vec3 prevHigh;
|
|
224
|
+
// in vec3 currentHigh;
|
|
225
|
+
// in vec3 nextHigh;
|
|
46
226
|
//
|
|
47
|
-
//
|
|
227
|
+
// in vec3 prevLow;
|
|
228
|
+
// in vec3 currentLow;
|
|
229
|
+
// in vec3 nextLow;
|
|
48
230
|
//
|
|
49
|
-
//
|
|
231
|
+
// in float order;
|
|
232
|
+
//
|
|
233
|
+
// in vec4 color;
|
|
50
234
|
//
|
|
51
235
|
// uniform float thickness;
|
|
52
236
|
// uniform mat4 proj;
|
|
@@ -57,9 +241,9 @@ import { Program } from '../webgl/Program.js';
|
|
|
57
241
|
// uniform float opacity;
|
|
58
242
|
// uniform float depthOffset;
|
|
59
243
|
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
//
|
|
244
|
+
// out vec4 vColor;
|
|
245
|
+
// out vec3 vPos;
|
|
246
|
+
// out vec3 uCamPos;
|
|
63
247
|
//
|
|
64
248
|
// const float NEAR = -1.0;
|
|
65
249
|
//
|
|
@@ -174,215 +358,31 @@ import { Program } from '../webgl/Program.js';
|
|
|
174
358
|
// }`,
|
|
175
359
|
//
|
|
176
360
|
// fragmentShader:
|
|
177
|
-
//
|
|
361
|
+
// `#version 300 es
|
|
362
|
+
//
|
|
363
|
+
// precision highp float;
|
|
364
|
+
//
|
|
178
365
|
// uniform vec2 uFloatParams;
|
|
179
|
-
//
|
|
180
|
-
//
|
|
181
|
-
//
|
|
366
|
+
//
|
|
367
|
+
// layout(location = 0) out vec4 diffuseColor;
|
|
368
|
+
// layout(location = 1) out vec4 normalColor;
|
|
369
|
+
// layout(location = 2) out vec4 distanceColor;
|
|
370
|
+
//
|
|
371
|
+
// in vec3 uCamPos;
|
|
372
|
+
// in vec4 vColor;
|
|
373
|
+
// in vec3 vPos;
|
|
374
|
+
//
|
|
182
375
|
// void main() {
|
|
183
376
|
// vec3 look = vPos - uCamPos;
|
|
184
377
|
// float lookLength = length(look);
|
|
185
378
|
// float a = vColor.a * step(lookLength, sqrt(dot(uCamPos,uCamPos) - uFloatParams[0]) + sqrt(dot(vPos,vPos) - uFloatParams[0]));
|
|
186
|
-
//
|
|
379
|
+
// diffuseColor = vec4(vColor.rgb, a);
|
|
380
|
+
// normalColor = vec4(1.0);
|
|
381
|
+
// distanceColor = vec4(1.0);
|
|
187
382
|
// }`
|
|
188
383
|
// });
|
|
189
384
|
// }
|
|
190
385
|
|
|
191
|
-
export function polyline_screen() {
|
|
192
|
-
return new Program("polyline_screen", {
|
|
193
|
-
uniforms: {
|
|
194
|
-
viewport: "vec2",
|
|
195
|
-
proj: "mat4",
|
|
196
|
-
view: "mat4",
|
|
197
|
-
eyePositionHigh: "vec3",
|
|
198
|
-
eyePositionLow: "vec3",
|
|
199
|
-
uFloatParams: "vec2",
|
|
200
|
-
thickness: "float",
|
|
201
|
-
opacity: "float",
|
|
202
|
-
depthOffset: "float"
|
|
203
|
-
},
|
|
204
|
-
attributes: {
|
|
205
|
-
prevHigh: "vec3",
|
|
206
|
-
currentHigh: "vec3",
|
|
207
|
-
nextHigh: "vec3",
|
|
208
|
-
|
|
209
|
-
prevLow: "vec3",
|
|
210
|
-
currentLow: "vec3",
|
|
211
|
-
nextLow: "vec3",
|
|
212
|
-
|
|
213
|
-
order: "float",
|
|
214
|
-
|
|
215
|
-
color: "vec4"
|
|
216
|
-
},
|
|
217
|
-
|
|
218
|
-
vertexShader:
|
|
219
|
-
`#version 300 es
|
|
220
|
-
|
|
221
|
-
precision highp float;
|
|
222
|
-
|
|
223
|
-
in vec3 prevHigh;
|
|
224
|
-
in vec3 currentHigh;
|
|
225
|
-
in vec3 nextHigh;
|
|
226
|
-
|
|
227
|
-
in vec3 prevLow;
|
|
228
|
-
in vec3 currentLow;
|
|
229
|
-
in vec3 nextLow;
|
|
230
|
-
|
|
231
|
-
in float order;
|
|
232
|
-
|
|
233
|
-
in vec4 color;
|
|
234
|
-
|
|
235
|
-
uniform float thickness;
|
|
236
|
-
uniform mat4 proj;
|
|
237
|
-
uniform mat4 view;
|
|
238
|
-
uniform vec2 viewport;
|
|
239
|
-
uniform vec3 eyePositionHigh;
|
|
240
|
-
uniform vec3 eyePositionLow;
|
|
241
|
-
uniform float opacity;
|
|
242
|
-
uniform float depthOffset;
|
|
243
|
-
|
|
244
|
-
out vec4 vColor;
|
|
245
|
-
out vec3 vPos;
|
|
246
|
-
out vec3 uCamPos;
|
|
247
|
-
|
|
248
|
-
const float NEAR = -1.0;
|
|
249
|
-
|
|
250
|
-
vec2 getIntersection(vec2 start1, vec2 end1, vec2 start2, vec2 end2){
|
|
251
|
-
vec2 dir = end2 - start2;
|
|
252
|
-
vec2 perp = vec2(-dir.y, dir.x);
|
|
253
|
-
float d2 = dot(perp, start2);
|
|
254
|
-
float seg = dot(perp, start1) - d2;
|
|
255
|
-
float prl = seg - dot(perp, end1) + d2;
|
|
256
|
-
if(prl > -1.0 && prl < 1.0){
|
|
257
|
-
return start1;
|
|
258
|
-
}
|
|
259
|
-
float u = seg / prl;
|
|
260
|
-
return start1 + u * (end1 - start1);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
vec2 project(vec4 p){
|
|
264
|
-
return (0.5 * p.xyz / p.w + 0.5).xy * viewport;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
void main(){
|
|
268
|
-
|
|
269
|
-
uCamPos = eyePositionHigh + eyePositionLow;
|
|
270
|
-
|
|
271
|
-
vColor = vec4(color.rgb, color.a * opacity);
|
|
272
|
-
|
|
273
|
-
vec3 current = currentHigh + currentLow;
|
|
274
|
-
|
|
275
|
-
vPos = current;
|
|
276
|
-
|
|
277
|
-
mat4 viewMatrixRTE = view;
|
|
278
|
-
viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
|
|
279
|
-
|
|
280
|
-
vec3 highDiff, lowDiff;
|
|
281
|
-
|
|
282
|
-
highDiff = currentHigh - eyePositionHigh;
|
|
283
|
-
lowDiff = currentLow - eyePositionLow;
|
|
284
|
-
vec4 vCurrent = viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
|
|
285
|
-
|
|
286
|
-
highDiff = prevHigh - eyePositionHigh;
|
|
287
|
-
lowDiff = prevLow - eyePositionLow;
|
|
288
|
-
vec4 vPrev = viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
|
|
289
|
-
|
|
290
|
-
highDiff = nextHigh - eyePositionHigh;
|
|
291
|
-
lowDiff = nextLow - eyePositionLow;
|
|
292
|
-
vec4 vNext = viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
|
|
293
|
-
|
|
294
|
-
/*Clip near plane, the point behind view plane*/
|
|
295
|
-
if(vCurrent.z > NEAR) {
|
|
296
|
-
if(vPrev.z < NEAR && abs(order) == 1.0){
|
|
297
|
-
vCurrent = vPrev + (vCurrent - vPrev) * (NEAR - vPrev.z) / (vCurrent.z - vPrev.z);
|
|
298
|
-
} else if(vNext.z < NEAR && abs(order) == 2.0){
|
|
299
|
-
vCurrent = vNext + (vCurrent - vNext) * (NEAR - vNext.z) / (vCurrent.z - vNext.z);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
vec4 dCurrent = proj * vCurrent;
|
|
304
|
-
vec2 _next = project(proj * vNext);
|
|
305
|
-
vec2 _prev = project(proj * vPrev);
|
|
306
|
-
vec2 _current = project(dCurrent);
|
|
307
|
-
|
|
308
|
-
if(_prev == _current){
|
|
309
|
-
if(_next == _current){
|
|
310
|
-
_next = _current + vec2(1.0, 0.0);
|
|
311
|
-
_prev = _current - _next;
|
|
312
|
-
}else{
|
|
313
|
-
_prev = _current + normalize(_current - _next);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
if(_next == _current){
|
|
318
|
-
_next = _current + normalize(_current - _prev);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
vec2 sNext = _next,
|
|
322
|
-
sCurrent = _current,
|
|
323
|
-
sPrev = _prev;
|
|
324
|
-
|
|
325
|
-
vec2 dirNext = normalize(sNext - sCurrent);
|
|
326
|
-
vec2 dirPrev = normalize(sPrev - sCurrent);
|
|
327
|
-
float dotNP = dot(dirNext, dirPrev);
|
|
328
|
-
|
|
329
|
-
vec2 normalNext = normalize(vec2(-dirNext.y, dirNext.x));
|
|
330
|
-
vec2 normalPrev = normalize(vec2(dirPrev.y, -dirPrev.x));
|
|
331
|
-
|
|
332
|
-
float d = thickness * sign(order);
|
|
333
|
-
|
|
334
|
-
vec2 m;
|
|
335
|
-
if(dotNP >= 0.99991){
|
|
336
|
-
m = sCurrent - normalPrev * d;
|
|
337
|
-
}else{
|
|
338
|
-
m = getIntersection( sCurrent + normalPrev * d, sPrev + normalPrev * d,
|
|
339
|
-
sCurrent + normalNext * d, sNext + normalNext * d );
|
|
340
|
-
|
|
341
|
-
if( dotNP > 0.5 && dot(dirNext + dirPrev, m - sCurrent) < 0.0 ){
|
|
342
|
-
float occw = order * sign(dirNext.x * dirPrev.y - dirNext.y * dirPrev.x);
|
|
343
|
-
if(occw == -1.0){
|
|
344
|
-
m = sCurrent + normalPrev * d;
|
|
345
|
-
}else if(occw == 1.0){
|
|
346
|
-
m = sCurrent + normalNext * d;
|
|
347
|
-
}else if(occw == -2.0){
|
|
348
|
-
m = sCurrent + normalNext * d;
|
|
349
|
-
}else if(occw == 2.0){
|
|
350
|
-
m = sCurrent + normalPrev * d;
|
|
351
|
-
}
|
|
352
|
-
}else if(distance(sCurrent, m) > min(distance(sCurrent, sNext), distance(sCurrent, sPrev))){
|
|
353
|
-
m = sCurrent + normalNext * d;
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
gl_Position = vec4((2.0 * m / viewport - 1.0) * dCurrent.w, dCurrent.z + depthOffset, dCurrent.w);
|
|
358
|
-
}`,
|
|
359
|
-
|
|
360
|
-
fragmentShader:
|
|
361
|
-
`#version 300 es
|
|
362
|
-
|
|
363
|
-
precision highp float;
|
|
364
|
-
|
|
365
|
-
uniform vec2 uFloatParams;
|
|
366
|
-
|
|
367
|
-
layout(location = 0) out vec4 diffuseColor;
|
|
368
|
-
layout(location = 1) out vec4 normalColor;
|
|
369
|
-
layout(location = 2) out vec4 distanceColor;
|
|
370
|
-
|
|
371
|
-
in vec3 uCamPos;
|
|
372
|
-
in vec4 vColor;
|
|
373
|
-
in vec3 vPos;
|
|
374
|
-
|
|
375
|
-
void main() {
|
|
376
|
-
vec3 look = vPos - uCamPos;
|
|
377
|
-
float lookLength = length(look);
|
|
378
|
-
float a = vColor.a * step(lookLength, sqrt(dot(uCamPos,uCamPos) - uFloatParams[0]) + sqrt(dot(vPos,vPos) - uFloatParams[0]));
|
|
379
|
-
diffuseColor = vec4(vColor.rgb, a);
|
|
380
|
-
normalColor = vec4(1.0);
|
|
381
|
-
distanceColor = vec4(1.0);
|
|
382
|
-
}`
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
|
|
386
386
|
export function polyline_picking() {
|
|
387
387
|
return new Program("polyline_picking", {
|
|
388
388
|
uniforms: {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { Layer } from "../layer/Layer.js";
|
|
4
4
|
import { WMS } from "../layer/WMS.js";
|
|
5
5
|
import { isPowerOfTwo, nextHighestPowerOfTwo } from "../math.js";
|
|
6
6
|
import { getTileExtent } from "../mercator.js";
|
|
7
|
-
import {
|
|
7
|
+
import { GlobusTerrain } from "./GlobusTerrain.js";
|
|
8
8
|
|
|
9
9
|
class BilTerrain extends GlobusTerrain {
|
|
10
10
|
constructor(options) {
|
|
@@ -34,8 +34,8 @@ class BilTerrain extends GlobusTerrain {
|
|
|
34
34
|
options.plainGridSize != undefined
|
|
35
35
|
? options.plainGridSize
|
|
36
36
|
: isPowerOfTwo(this._imageSize)
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
? this._imageSize / 2
|
|
38
|
+
: nextHighestPowerOfTwo(this._imageSize) / 2;
|
|
39
39
|
|
|
40
40
|
this._dataType = "arrayBuffer";
|
|
41
41
|
}
|
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
*/
|
|
4
4
|
"use strict";
|
|
5
5
|
|
|
6
|
+
import { Events } from "../Events.js";
|
|
6
7
|
import * as mercator from "../mercator.js";
|
|
7
|
-
import { EmptyTerrain } from "./EmptyTerrain.js";
|
|
8
8
|
import { EPSG3857 } from "../proj/EPSG3857.js";
|
|
9
|
-
import { Events } from "../Events.js";
|
|
10
|
-
import { Loader } from "../utils/Loader.js";
|
|
11
9
|
import { NOTRENDERING } from "../quadTree/quadTree.js";
|
|
10
|
+
import { Loader } from "../utils/Loader.js";
|
|
11
|
+
import { EmptyTerrain } from "./EmptyTerrain.js";
|
|
12
12
|
// import { QueueArray } from '../QueueArray.js';
|
|
13
|
-
import { createExtent, stringTemplate } from "../utils/shared.js";
|
|
14
|
-
import { Layer } from "../layer/Layer.js";
|
|
15
|
-
import { Vec3 } from "../math/Vec3.js";
|
|
16
|
-
import { Ray } from "../math/Ray.js";
|
|
17
13
|
import { Extent } from "../Extent.js";
|
|
14
|
+
import { Layer } from "../layer/Layer.js";
|
|
18
15
|
import { LonLat } from "../LonLat.js";
|
|
16
|
+
import { Ray } from "../math/Ray.js";
|
|
17
|
+
import { Vec3 } from "../math/Vec3.js";
|
|
18
|
+
import { createExtent, stringTemplate } from "../utils/shared.js";
|
|
19
19
|
|
|
20
20
|
const EVENT_NAMES = [
|
|
21
21
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { getTileExtent } from "../mercator.js";
|
|
2
1
|
import { Layer } from "../layer/Layer.js";
|
|
3
|
-
import { GlobusTerrain } from "./GlobusTerrain.js";
|
|
4
2
|
import { isPowerOfTwo } from "../math.js";
|
|
5
3
|
import * as mercator from "../mercator.js";
|
|
4
|
+
import { getTileExtent } from "../mercator.js";
|
|
5
|
+
import { GlobusTerrain } from "./GlobusTerrain.js";
|
|
6
6
|
|
|
7
7
|
const KEY =
|
|
8
8
|
"pk.eyJ1IjoiZm94bXVsZGVyODMiLCJhIjoiY2pqYmR3dG5oM2Z1bzNrczJqYm5pODhuNSJ9.Y4DRmEPhb-XSlCR9CAXACQ";
|
package/src/og/terrain/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { BilTerrain } from './BilTerrain';
|
|
1
2
|
import { EmptyTerrain } from './EmptyTerrain';
|
|
2
3
|
import { GlobusTerrain } from './GlobusTerrain';
|
|
3
4
|
import { MapboxTerrain } from './MapboxTerrain';
|
|
4
|
-
import { BilTerrain } from './BilTerrain';
|
|
5
5
|
|
|
6
|
-
export { EmptyTerrain, GlobusTerrain, MapboxTerrain, BilTerrain };
|
|
6
|
+
export { EmptyTerrain, GlobusTerrain, MapboxTerrain, BilTerrain };
|
package/src/og/ui/Button.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
import { View } from './View.js';
|
|
4
3
|
import { stringTemplate } from '../utils/shared.js';
|
|
4
|
+
import { View } from './View.js';
|
|
5
5
|
|
|
6
6
|
const TEMPLATE =
|
|
7
|
-
`<div class="og-button">
|
|
7
|
+
`<div class="og-button" title="{title}">
|
|
8
8
|
<div class="og-button-icon">{icon}</div>
|
|
9
9
|
<div class="og-button-text">{text}</div>
|
|
10
10
|
</div>`;
|
|
@@ -14,7 +14,8 @@ class Button extends View {
|
|
|
14
14
|
super({
|
|
15
15
|
template: stringTemplate(TEMPLATE, {
|
|
16
16
|
icon: options.icon || "",
|
|
17
|
-
text: options.text || ""
|
|
17
|
+
text: options.text || "",
|
|
18
|
+
title: options.title || ""
|
|
18
19
|
}),
|
|
19
20
|
...options,
|
|
20
21
|
eventList: ["click", "mousedown", "mouseup", "touchstart", "touchend", "touchcancel", ...(options.eventList || [])]
|
|
@@ -103,4 +104,4 @@ class Button extends View {
|
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
106
|
|
|
106
|
-
export { Button }
|
|
107
|
+
export { Button };
|
package/src/og/ui/Dialog.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
import { View } from './View.js';
|
|
4
3
|
import { getDefault, stringTemplate } from '../utils/shared.js';
|
|
5
4
|
import { Button } from './Button.js';
|
|
5
|
+
import { CLOSE_ICON } from './icons.js';
|
|
6
|
+
import { View } from './View.js';
|
|
6
7
|
|
|
7
8
|
const TEMPLATE = `<div class="og-ddialog"
|
|
8
9
|
style="display:{display}; resize:{resize}; width: {width}px; {height}; top: {top}px; left: {left}px; min-height: {minHeight}; max-height: {maxHeight}; min-width: {minWidth}; max-width: {maxWidth};">
|
|
@@ -13,10 +14,6 @@ const TEMPLATE = `<div class="og-ddialog"
|
|
|
13
14
|
<div class="og-ddialog-container"></div>
|
|
14
15
|
</div>>`;
|
|
15
16
|
|
|
16
|
-
const CLOSE_ICON = `<svg className="svg-icon" style="width: 1em; height: 1em;vertical-align: middle;fill: currentColor; overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
|
17
|
-
<path d="M777.856 280.192l-33.92-33.952-231.872 231.872-231.84-231.872-33.984 33.888 231.872 231.904-231.84 231.84 33.888 33.984 231.904-231.904 231.84 231.872 33.952-33.888-231.872-231.904z"/>
|
|
18
|
-
</svg>`
|
|
19
|
-
|
|
20
17
|
class Dialog extends View {
|
|
21
18
|
constructor(options = {}) {
|
|
22
19
|
super({
|
|
@@ -239,4 +236,4 @@ class Dialog extends View {
|
|
|
239
236
|
}
|
|
240
237
|
}
|
|
241
238
|
|
|
242
|
-
export { Dialog }
|
|
239
|
+
export { Dialog };
|
package/src/og/ui/Slider.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
import { View } from './View.js';
|
|
4
|
-
import { stringTemplate } from '../utils/shared.js';
|
|
5
3
|
import { clamp } from '../math.js';
|
|
4
|
+
import { stringTemplate } from '../utils/shared.js';
|
|
5
|
+
import { View } from './View.js';
|
|
6
6
|
|
|
7
7
|
const TEMPLATE = `<div class="og-slider">
|
|
8
8
|
<div class="og-slider-label">{label}</div>
|
|
@@ -81,6 +81,23 @@ class Slider extends View {
|
|
|
81
81
|
|
|
82
82
|
this._onMouseWheel_ = this._onMouseWheel.bind(this);
|
|
83
83
|
this.$panel.addEventListener("mousewheel", this._onMouseWheel_);
|
|
84
|
+
|
|
85
|
+
this._onMouseWheelFF_ = this._onMouseWheelFF.bind(this);
|
|
86
|
+
this.$panel.addEventListener("wheel", this._onMouseWheelFF_);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
_clearEvents() {
|
|
90
|
+
this.$panel.removeEventListener("mousedown", this._onMouseDown_);
|
|
91
|
+
this._onMouseDown_ = undefined;
|
|
92
|
+
|
|
93
|
+
this.$input.removeEventListener("input", this._onInput_);
|
|
94
|
+
this._onInput_ = undefined;
|
|
95
|
+
|
|
96
|
+
this.$panel.removeEventListener("mousewheel", this._onMouseWheel_);
|
|
97
|
+
this._onMouseWheel_ = undefined;
|
|
98
|
+
|
|
99
|
+
this.$panel.removeEventListener("wheel", this._onMouseWheelFF_);
|
|
100
|
+
this._onMouseWheelFF_ = undefined;
|
|
84
101
|
}
|
|
85
102
|
|
|
86
103
|
_onMouseWheel(e) {
|
|
@@ -90,6 +107,10 @@ class Slider extends View {
|
|
|
90
107
|
this.value = this._value + Math.sign(e.wheelDelta) * (this._max - this._min) / 100.0;
|
|
91
108
|
}
|
|
92
109
|
|
|
110
|
+
_onMouseWheelFF(e) {
|
|
111
|
+
this._onMouseWheel(e);
|
|
112
|
+
}
|
|
113
|
+
|
|
93
114
|
_onInput(e) {
|
|
94
115
|
e = e || window.event;
|
|
95
116
|
e.preventDefault();
|
|
@@ -137,8 +158,13 @@ class Slider extends View {
|
|
|
137
158
|
document.removeEventListener("mousemove", this._onMouseMove_);
|
|
138
159
|
this._onMouseMove_ = undefined;
|
|
139
160
|
}
|
|
161
|
+
|
|
162
|
+
remove() {
|
|
163
|
+
this._clearEvents();
|
|
164
|
+
super.remove();
|
|
165
|
+
}
|
|
140
166
|
}
|
|
141
167
|
|
|
142
168
|
export {
|
|
143
169
|
Slider
|
|
144
|
-
}
|
|
170
|
+
};
|
package/src/og/ui/View.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
import { stringTemplate } from '../utils/shared.js';
|
|
5
|
-
import { parseHTML } from "../utils/shared.js";
|
|
6
4
|
import { Events } from '../Events.js';
|
|
5
|
+
import { parseHTML, stringTemplate } from '../utils/shared.js';
|
|
7
6
|
|
|
8
7
|
class View {
|
|
9
8
|
constructor(options = {}) {
|
|
@@ -13,9 +12,6 @@ class View {
|
|
|
13
12
|
this.template = options.template || "";
|
|
14
13
|
this.parent = options.parent || null;
|
|
15
14
|
this._classList = options.classList || [];
|
|
16
|
-
if (options.appendTo) {
|
|
17
|
-
this.appendTo(options.appendTo);
|
|
18
|
-
}
|
|
19
15
|
}
|
|
20
16
|
|
|
21
17
|
static set __staticCounter(n) {
|
|
@@ -60,6 +56,10 @@ class View {
|
|
|
60
56
|
}
|
|
61
57
|
}
|
|
62
58
|
|
|
59
|
+
get events() {
|
|
60
|
+
return this._events;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
63
|
on(eventName, callback, sender) {
|
|
64
64
|
return this._events.on(eventName, callback, sender);
|
|
65
65
|
}
|