@openglobus/og 0.11.5 → 0.12.0
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/css/og.css +5 -2
- package/package.json +12 -14
- package/src/og/Clock.js +6 -10
- package/src/og/Events.js +5 -7
- package/src/og/Extent.js +73 -32
- package/src/og/Globe.js +25 -10
- package/src/og/ImageCanvas.js +18 -15
- package/src/og/LonLat.js +13 -10
- package/src/og/Popup.js +19 -17
- package/src/og/QueueArray.js +3 -4
- package/src/og/Rectangle.js +4 -6
- package/src/og/Stack.js +2 -4
- package/src/og/ajax.js +20 -14
- package/src/og/astro/earth.js +21 -15
- package/src/og/bv/Box.js +2 -3
- package/src/og/bv/Sphere.js +10 -7
- package/src/og/camera/Camera.js +70 -79
- package/src/og/camera/Frustum.js +19 -12
- package/src/og/camera/PlanetCamera.js +33 -34
- package/src/og/control/CompassButton.js +1 -2
- package/src/og/control/Control.js +7 -9
- package/src/og/control/DebugInfo.js +2 -3
- package/src/og/control/EarthNavigation.js +26 -17
- package/src/og/control/KeyboardNavigation.js +9 -9
- package/src/og/control/LayerSwitcher.js +21 -20
- package/src/og/control/Lighting.js +74 -64
- package/src/og/control/MouseNavigation.js +30 -29
- package/src/og/control/MouseWheelZoomControl.js +257 -0
- package/src/og/control/SegmentBoundVisualization.js +5 -6
- package/src/og/control/ShowFps.js +12 -7
- package/src/og/control/SimpleNavigation.js +5 -7
- package/src/og/control/Sun.js +24 -14
- package/src/og/control/ToggleWireframe.js +3 -3
- package/src/og/control/TouchNavigation.js +43 -32
- package/src/og/control/ZoomControl.js +40 -24
- package/src/og/control/index.js +2 -0
- package/src/og/control/visibleExtent/Segment.js +1862 -0
- package/src/og/control/visibleExtent/VisibleExtent.js +80 -0
- package/src/og/control/visibleExtent/drawnode.js +751 -0
- package/src/og/ellipsoid/Ellipsoid.js +149 -57
- package/src/og/ellipsoid/wgs84.js +3 -3
- package/src/og/entity/BaseBillboard.js +72 -30
- package/src/og/entity/Billboard.js +9 -5
- package/src/og/entity/BillboardHandler.js +315 -62
- package/src/og/entity/Entity.js +742 -704
- package/src/og/entity/EntityCollection.js +47 -24
- package/src/og/entity/GeoObject.js +228 -0
- package/src/og/entity/GeoObjectHandler.js +895 -0
- package/src/og/entity/GeometryHandler.js +595 -123
- package/src/og/entity/Label.js +62 -30
- package/src/og/entity/LabelHandler.js +42 -243
- package/src/og/entity/LabelWorker.js +218 -0
- package/src/og/entity/Object3d.js +504 -0
- package/src/og/entity/PointCloud.js +76 -28
- package/src/og/entity/PointCloudHandler.js +5 -5
- package/src/og/entity/Ray.js +49 -16
- package/src/og/entity/Strip.js +72 -43
- package/src/og/entity/StripHandler.js +23 -23
- package/src/og/layer/BaseGeoImage.js +50 -19
- package/src/og/layer/CanvasTiles.js +16 -17
- package/src/og/layer/GeoImage.js +8 -16
- package/src/og/layer/GeoTexture2d.js +2 -10
- package/src/og/layer/GeoVideo.js +2 -10
- package/src/og/layer/KML.js +55 -33
- package/src/og/layer/Layer.js +24 -33
- package/src/og/layer/Material.js +1 -1
- package/src/og/layer/Vector.js +94 -48
- package/src/og/layer/WMS.js +33 -18
- package/src/og/layer/XYZ.js +24 -26
- package/src/og/light/LightSource.js +19 -12
- package/src/og/math/Mat3.js +24 -12
- package/src/og/math/Mat4.js +603 -603
- package/src/og/math/Plane.js +19 -18
- package/src/og/math/Ray.js +17 -12
- package/src/og/math/Vec2.js +24 -14
- package/src/og/math/Vec3.js +78 -32
- package/src/og/math/coder.js +7 -7
- package/src/og/proj/EPSG3857.js +3 -3
- package/src/og/proj/EPSG4326.js +3 -3
- package/src/og/proj/Proj.js +2 -4
- package/src/og/quadTree/Node.js +50 -95
- package/src/og/quadTree/quadTree.js +1 -1
- package/src/og/renderer/Renderer.js +106 -126
- package/src/og/renderer/RendererEvents.js +45 -23
- package/src/og/scene/BaseNode.js +2 -3
- package/src/og/scene/Planet.js +139 -191
- package/src/og/scene/RenderNode.js +15 -8
- package/src/og/segment/Segment.js +93 -268
- package/src/og/segment/Slice.js +45 -0
- package/src/og/shaders/drawnode.js +174 -360
- package/src/og/shaders/geoObject.js +211 -0
- package/src/og/shaders/pointCloud.js +41 -41
- package/src/og/shaders/shape.js +12 -18
- package/src/og/shaders/skybox.js +36 -36
- package/src/og/shaders/toneMapping.js +1 -0
- package/src/og/shapes/BaseShape.js +108 -36
- package/src/og/shapes/Icosphere.js +25 -10
- package/src/og/shapes/Sphere.js +8 -11
- package/src/og/terrain/EmptyTerrain.js +3 -2
- package/src/og/terrain/GlobusTerrain.js +2 -0
- package/src/og/utils/FontAtlas.js +6 -2
- package/src/og/utils/GeoImageCreator.js +5 -1
- package/src/og/utils/Loader.js +1 -1
- package/src/og/utils/PlainSegmentWorker.js +0 -13
- package/src/og/utils/TextureAtlas.js +18 -20
- package/src/og/utils/VectorTileCreator.js +1 -3
- package/src/og/utils/shared.js +2 -2
- package/src/og/webgl/Handler.js +219 -162
- package/src/og/webgl/Multisample.js +44 -16
- package/src/og/webgl/Program.js +78 -33
- package/src/og/webgl/callbacks.js +3 -3
- package/types/Clock.d.ts +0 -94
- package/types/Deferred.d.ts +0 -6
- package/types/Events.d.ts +0 -77
- package/types/Extent.d.ts +0 -166
- package/types/Globe.d.ts +0 -82
- package/types/ImageCanvas.d.ts +0 -123
- package/types/Lock.d.ts +0 -12
- package/types/LonLat.d.ts +0 -108
- package/types/Popup.d.ts +0 -42
- package/types/QueueArray.d.ts +0 -19
- package/types/Rectangle.d.ts +0 -80
- package/types/Stack.d.ts +0 -19
- package/types/ajax.d.ts +0 -24
- package/types/arial.d.ts +0 -48
- package/types/astro/astro.d.ts +0 -38
- package/types/astro/earth.d.ts +0 -7
- package/types/astro/jd.d.ts +0 -254
- package/types/bv/Box.d.ts +0 -30
- package/types/bv/Sphere.d.ts +0 -38
- package/types/bv/index.d.ts +0 -3
- package/types/camera/Camera.d.ts +0 -312
- package/types/camera/Frustum.d.ts +0 -133
- package/types/camera/PlanetCamera.d.ts +0 -218
- package/types/camera/index.d.ts +0 -3
- package/types/cons.d.ts +0 -40
- package/types/control/CompassButton.d.ts +0 -17
- package/types/control/Control.d.ts +0 -104
- package/types/control/DebugInfo.d.ts +0 -15
- package/types/control/EarthCoordinates.d.ts +0 -47
- package/types/control/EarthNavigation.d.ts +0 -42
- package/types/control/GeoImageDragControl.d.ts +0 -6
- package/types/control/KeyboardNavigation.d.ts +0 -21
- package/types/control/LayerSwitcher.d.ts +0 -21
- package/types/control/Lighting.d.ts +0 -16
- package/types/control/MouseNavigation.d.ts +0 -47
- package/types/control/ScaleControl.d.ts +0 -22
- package/types/control/ShowFps.d.ts +0 -11
- package/types/control/SimpleNavigation.d.ts +0 -25
- package/types/control/Sun.d.ts +0 -50
- package/types/control/ToggleWireframe.d.ts +0 -12
- package/types/control/TouchNavigation.d.ts +0 -48
- package/types/control/ZoomControl.d.ts +0 -27
- package/types/control/index.d.ts +0 -17
- package/types/ellipsoid/Ellipsoid.d.ts +0 -146
- package/types/ellipsoid/index.d.ts +0 -3
- package/types/ellipsoid/wgs84.d.ts +0 -6
- package/types/entity/BaseBillboard.d.ts +0 -208
- package/types/entity/Billboard.d.ts +0 -94
- package/types/entity/BillboardHandler.d.ts +0 -78
- package/types/entity/Entity.d.ts +0 -333
- package/types/entity/EntityCollection.d.ts +0 -311
- package/types/entity/Geometry.d.ts +0 -74
- package/types/entity/GeometryHandler.d.ts +0 -76
- package/types/entity/Label.d.ts +0 -189
- package/types/entity/LabelHandler.d.ts +0 -29
- package/types/entity/PointCloud.d.ts +0 -174
- package/types/entity/PointCloudHandler.d.ts +0 -38
- package/types/entity/Polyline.d.ts +0 -306
- package/types/entity/PolylineHandler.d.ts +0 -18
- package/types/entity/Ray.d.ts +0 -124
- package/types/entity/RayHandler.d.ts +0 -67
- package/types/entity/ShapeHandler.d.ts +0 -22
- package/types/entity/Strip.d.ts +0 -119
- package/types/entity/StripHandler.d.ts +0 -38
- package/types/entity/index.d.ts +0 -8
- package/types/index.core.d.ts +0 -65
- package/types/index.d.ts +0 -45
- package/types/index.webgl.d.ts +0 -7
- package/types/input/KeyboardHandler.d.ts +0 -10
- package/types/input/MouseHandler.d.ts +0 -5
- package/types/input/TouchHandler.d.ts +0 -5
- package/types/input/input.d.ts +0 -34
- package/types/layer/BaseGeoImage.d.ts +0 -94
- package/types/layer/CanvasTiles.d.ts +0 -68
- package/types/layer/GeoImage.d.ts +0 -52
- package/types/layer/GeoTexture2d.d.ts +0 -8
- package/types/layer/GeoVideo.d.ts +0 -55
- package/types/layer/KML.d.ts +0 -63
- package/types/layer/Layer.d.ts +0 -326
- package/types/layer/Material.d.ts +0 -45
- package/types/layer/Vector.d.ts +0 -208
- package/types/layer/WMS.d.ts +0 -63
- package/types/layer/XYZ.d.ts +0 -120
- package/types/layer/index.d.ts +0 -10
- package/types/light/LightSource.d.ts +0 -178
- package/types/math/Line2.d.ts +0 -11
- package/types/math/Line3.d.ts +0 -10
- package/types/math/Mat3.d.ts +0 -65
- package/types/math/Mat4.d.ts +0 -176
- package/types/math/Plane.d.ts +0 -18
- package/types/math/Quat.d.ts +0 -379
- package/types/math/Ray.d.ts +0 -82
- package/types/math/Vec2.d.ts +0 -309
- package/types/math/Vec3.d.ts +0 -460
- package/types/math/Vec4.d.ts +0 -162
- package/types/math/coder.d.ts +0 -43
- package/types/math/index.d.ts +0 -11
- package/types/math.d.ts +0 -261
- package/types/mercator.d.ts +0 -92
- package/types/proj/EPSG3857.d.ts +0 -6
- package/types/proj/EPSG4326.d.ts +0 -6
- package/types/proj/Proj.d.ts +0 -42
- package/types/quadTree/EntityCollectionNode.d.ts +0 -34
- package/types/quadTree/Node.d.ts +0 -61
- package/types/quadTree/quadTree.d.ts +0 -40
- package/types/renderer/Renderer.d.ts +0 -298
- package/types/renderer/RendererEvents.d.ts +0 -233
- package/types/res/images.d.ts +0 -3
- package/types/scene/Axes.d.ts +0 -11
- package/types/scene/BaseNode.d.ts +0 -60
- package/types/scene/Planet.d.ts +0 -577
- package/types/scene/RenderNode.d.ts +0 -142
- package/types/scene/SkyBox.d.ts +0 -10
- package/types/scene/index.d.ts +0 -4
- package/types/segment/Segment.d.ts +0 -279
- package/types/segment/SegmentLonLat.d.ts +0 -16
- package/types/segment/segmentHelper.d.ts +0 -13
- package/types/shaders/billboard.d.ts +0 -3
- package/types/shaders/depth.d.ts +0 -2
- package/types/shaders/drawnode.d.ts +0 -7
- package/types/shaders/label.d.ts +0 -4
- package/types/shaders/pointCloud.d.ts +0 -2
- package/types/shaders/polyline.d.ts +0 -3
- package/types/shaders/ray.d.ts +0 -2
- package/types/shaders/screenFrame.d.ts +0 -2
- package/types/shaders/shape.d.ts +0 -4
- package/types/shaders/skybox.d.ts +0 -2
- package/types/shaders/toneMapping.d.ts +0 -2
- package/types/shapes/BaseShape.d.ts +0 -250
- package/types/shapes/Sphere.d.ts +0 -41
- package/types/terrain/BilTerrain.d.ts +0 -7
- package/types/terrain/EmptyTerrain.d.ts +0 -72
- package/types/terrain/Geoid.d.ts +0 -26
- package/types/terrain/GlobusTerrain.d.ts +0 -116
- package/types/terrain/MapboxTerrain.d.ts +0 -7
- package/types/terrain/index.d.ts +0 -5
- package/types/utils/FontAtlas.d.ts +0 -14
- package/types/utils/GeoImageCreator.d.ts +0 -30
- package/types/utils/ImagesCacheManager.d.ts +0 -10
- package/types/utils/Loader.d.ts +0 -25
- package/types/utils/NormalMapCreator.d.ts +0 -39
- package/types/utils/PlainSegmentWorker.d.ts +0 -10
- package/types/utils/TerrainWorker.d.ts +0 -9
- package/types/utils/TextureAtlas.d.ts +0 -111
- package/types/utils/VectorTileCreator.d.ts +0 -16
- package/types/utils/colorTable.d.ts +0 -143
- package/types/utils/earcut.d.ts +0 -6
- package/types/utils/shared.d.ts +0 -231
- package/types/webgl/Framebuffer.d.ts +0 -135
- package/types/webgl/Handler.d.ts +0 -388
- package/types/webgl/Multisample.d.ts +0 -89
- package/types/webgl/Program.d.ts +0 -155
- package/types/webgl/ProgramController.d.ts +0 -89
- package/types/webgl/callbacks.d.ts +0 -1
- package/types/webgl/index.d.ts +0 -6
- package/types/webgl/types.d.ts +0 -2
package/src/og/camera/Frustum.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
import { Mat4 } from
|
|
3
|
+
import { Mat4 } from "../math/Mat4.js";
|
|
4
4
|
|
|
5
5
|
function planeNormalize(plane) {
|
|
6
6
|
var t = 1.0 / Math.sqrt(plane[0] * plane[0] + plane[1] * plane[1] + plane[2] * plane[2]);
|
|
@@ -15,9 +15,8 @@ function planeNormalize(plane) {
|
|
|
15
15
|
* @class
|
|
16
16
|
*/
|
|
17
17
|
class Frustum {
|
|
18
|
-
|
|
19
18
|
/**
|
|
20
|
-
* @param {*} options
|
|
19
|
+
* @param {*} options
|
|
21
20
|
*/
|
|
22
21
|
constructor(options = {}) {
|
|
23
22
|
/**
|
|
@@ -89,7 +88,8 @@ class Frustum {
|
|
|
89
88
|
*/
|
|
90
89
|
this.far = 0.0;
|
|
91
90
|
|
|
92
|
-
this._cameraFrustumIndex =
|
|
91
|
+
this._cameraFrustumIndex =
|
|
92
|
+
options.cameraFrustumIndex != undefined ? options.cameraFrustumIndex : -1;
|
|
93
93
|
|
|
94
94
|
this.setProjectionMatrix(
|
|
95
95
|
options.fov || 30.0,
|
|
@@ -144,15 +144,21 @@ class Frustum {
|
|
|
144
144
|
* @param {number} far - Far camera distance.
|
|
145
145
|
*/
|
|
146
146
|
setProjectionMatrix(angle, aspect, near, far) {
|
|
147
|
-
|
|
148
|
-
this.top = near * Math.tan(angle * Math.PI / 360);
|
|
147
|
+
this.top = near * Math.tan((angle * Math.PI) / 360);
|
|
149
148
|
this.bottom = -this.top;
|
|
150
149
|
this.right = this.top * aspect;
|
|
151
150
|
this.left = -this.right;
|
|
152
151
|
this.near = near;
|
|
153
152
|
this.far = far;
|
|
154
153
|
|
|
155
|
-
this._projectionMatrix.setPerspective(
|
|
154
|
+
this._projectionMatrix.setPerspective(
|
|
155
|
+
this.left,
|
|
156
|
+
this.right,
|
|
157
|
+
this.bottom,
|
|
158
|
+
this.top,
|
|
159
|
+
near,
|
|
160
|
+
far
|
|
161
|
+
);
|
|
156
162
|
this._projectionMatrix.inverseTo(this._inverseProjectionMatrix);
|
|
157
163
|
}
|
|
158
164
|
|
|
@@ -162,7 +168,6 @@ class Frustum {
|
|
|
162
168
|
* @param {Mat4} projectionView - projectionView matrix.
|
|
163
169
|
*/
|
|
164
170
|
setViewMatrix(viewMatrix) {
|
|
165
|
-
|
|
166
171
|
this._projectionViewMatrix = this._projectionMatrix.mul(viewMatrix);
|
|
167
172
|
this._projectionViewMatrix.inverseTo(this._inverseProjectionViewMatrix);
|
|
168
173
|
|
|
@@ -295,11 +300,13 @@ class Frustum {
|
|
|
295
300
|
* @returns {boolean} -
|
|
296
301
|
*/
|
|
297
302
|
containsBox(box) {
|
|
298
|
-
var result = true,
|
|
303
|
+
var result = true,
|
|
304
|
+
cout,
|
|
305
|
+
cin;
|
|
299
306
|
|
|
300
307
|
for (var i = 0; i < 6; i++) {
|
|
301
|
-
|
|
302
|
-
|
|
308
|
+
cout = 0;
|
|
309
|
+
cin = 0;
|
|
303
310
|
|
|
304
311
|
for (var k = 0; k < 8 && (cin === 0 || cout === 0); k++) {
|
|
305
312
|
var d = box.vertices[k].dotArr(this._f[i]) + this._f[i][3];
|
|
@@ -31,26 +31,20 @@ import { Mat4 } from "../math/Mat4.js";
|
|
|
31
31
|
* @param {Vec3} [options.up] - Camera eye position. Default (0,1,0)
|
|
32
32
|
*/
|
|
33
33
|
class PlanetCamera extends Camera {
|
|
34
|
-
|
|
35
34
|
/**
|
|
36
35
|
* @param {RenderNode} planet - Planet render node.
|
|
37
36
|
* @param {Object} [options] - Planet camera options:
|
|
38
37
|
*/
|
|
39
38
|
constructor(planet, options) {
|
|
40
|
-
super(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
[1e6, 1e9]
|
|
50
|
-
] //[[1, 1e3 + 100], [1e3, 1e6 + 10000], [1e6, 1e9]]*/
|
|
51
|
-
},
|
|
52
|
-
options
|
|
53
|
-
)
|
|
39
|
+
super(planet.renderer, {
|
|
40
|
+
frustums: [
|
|
41
|
+
[1, 100 + 0.075],
|
|
42
|
+
[100, 1000 + 0.075],
|
|
43
|
+
[1000, 1e6 + 10000],
|
|
44
|
+
[1e6, 1e9]
|
|
45
|
+
], //[[1, 1e3 + 100], [1e3, 1e6 + 10000], [1e6, 1e9]]*/
|
|
46
|
+
...options
|
|
47
|
+
}
|
|
54
48
|
);
|
|
55
49
|
/**
|
|
56
50
|
* Assigned camera's planet.
|
|
@@ -145,7 +139,7 @@ class PlanetCamera extends Camera {
|
|
|
145
139
|
super.update();
|
|
146
140
|
this.updateGeodeticPosition();
|
|
147
141
|
this.eyeNorm = this.eye.normal();
|
|
148
|
-
this.slope = this.
|
|
142
|
+
this.slope = this._b.dot(this.eyeNorm);
|
|
149
143
|
this.events.dispatch(this.events.viewchange, this);
|
|
150
144
|
}
|
|
151
145
|
|
|
@@ -388,8 +382,8 @@ class PlanetCamera extends Camera {
|
|
|
388
382
|
var ground_a = this.planet.ellipsoid.lonLatToCartesian(
|
|
389
383
|
new LonLat(this._lonLat.lon, this._lonLat.lat)
|
|
390
384
|
);
|
|
391
|
-
var v_a = this.
|
|
392
|
-
n_a = this.
|
|
385
|
+
var v_a = this._u,
|
|
386
|
+
n_a = this._b;
|
|
393
387
|
|
|
394
388
|
var lonlat_b = this.planet.ellipsoid.cartesianToLonLat(cartesian);
|
|
395
389
|
var up_b = up || Vec3.UP;
|
|
@@ -544,18 +538,18 @@ class PlanetCamera extends Camera {
|
|
|
544
538
|
}
|
|
545
539
|
|
|
546
540
|
rotateVertical(angle, center, minSlope = 0) {
|
|
547
|
-
var rot = new Mat4().setRotation(this.
|
|
541
|
+
var rot = new Mat4().setRotation(this._r, angle);
|
|
548
542
|
var tr = new Mat4().setIdentity().translate(center);
|
|
549
543
|
var ntr = new Mat4().setIdentity().translate(center.negateTo());
|
|
550
544
|
var trm = tr.mul(rot).mul(ntr);
|
|
551
545
|
|
|
552
546
|
let eye = trm.mulVec3(this.eye);
|
|
553
|
-
let v = rot.mulVec3(this._v).normalize();
|
|
554
547
|
let u = rot.mulVec3(this._u).normalize();
|
|
555
|
-
let
|
|
548
|
+
let r = rot.mulVec3(this._r).normalize();
|
|
549
|
+
let b = rot.mulVec3(this._b).normalize();
|
|
556
550
|
|
|
557
551
|
let eyeNorm = eye.normal();
|
|
558
|
-
let slope =
|
|
552
|
+
let slope = b.dot(eyeNorm);
|
|
559
553
|
|
|
560
554
|
if (minSlope) {
|
|
561
555
|
let dSlope = slope - this.slope;
|
|
@@ -563,20 +557,20 @@ class PlanetCamera extends Camera {
|
|
|
563
557
|
if (slope < minSlope && dSlope < 0) return;
|
|
564
558
|
|
|
565
559
|
if (
|
|
566
|
-
(slope > 0.1 &&
|
|
560
|
+
(slope > 0.1 && u.dot(eyeNorm) > 0) ||
|
|
567
561
|
this.slope <= 0.1 ||
|
|
568
|
-
this.
|
|
562
|
+
this._u.dot(this.eye.normal()) <= 0.0
|
|
569
563
|
) {
|
|
570
564
|
this.eye = eye;
|
|
571
|
-
this._v = v;
|
|
572
565
|
this._u = u;
|
|
573
|
-
this.
|
|
566
|
+
this._r = r;
|
|
567
|
+
this._b = b;
|
|
574
568
|
}
|
|
575
569
|
} else {
|
|
576
570
|
this.eye = eye;
|
|
577
|
-
this._v = v;
|
|
578
571
|
this._u = u;
|
|
579
|
-
this.
|
|
572
|
+
this._r = r;
|
|
573
|
+
this._b = b;
|
|
580
574
|
}
|
|
581
575
|
}
|
|
582
576
|
|
|
@@ -593,9 +587,9 @@ class PlanetCamera extends Camera {
|
|
|
593
587
|
this.planet._normalMapCreator.lock(this._keyLock);
|
|
594
588
|
|
|
595
589
|
this.eye = this._framesArr[c].eye;
|
|
596
|
-
this.
|
|
597
|
-
this.
|
|
598
|
-
this.
|
|
590
|
+
this._r = this._framesArr[c].u;
|
|
591
|
+
this._u = this._framesArr[c].v;
|
|
592
|
+
this._b = this._framesArr[c].n;
|
|
599
593
|
|
|
600
594
|
if (this._frameCallback) {
|
|
601
595
|
this._frameCallback();
|
|
@@ -637,15 +631,20 @@ class PlanetCamera extends Camera {
|
|
|
637
631
|
getHeading() {
|
|
638
632
|
let u = this.eye.normal();
|
|
639
633
|
let f = Vec3.proj_b_to_plane(
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
634
|
+
this.slope >= 0.97 ? this.getUp() : this.getForward(),
|
|
635
|
+
u
|
|
636
|
+
).normalize(),
|
|
643
637
|
n = Vec3.proj_b_to_plane(Vec3.UP, u).normalize();
|
|
644
638
|
let res = Math.sign(u.dot(f.cross(n))) * Math.acos(f.dot(n)) * math.DEGREES;
|
|
645
639
|
if (res < 0.0) {
|
|
646
640
|
return 360.0 + res;
|
|
647
641
|
}
|
|
648
642
|
return res;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
isVisible(poi) {
|
|
646
|
+
let e = this.eye.length();
|
|
647
|
+
return this.eye.distance(poi) < Math.sqrt(e * e - this.planet.ellipsoid._a2);
|
|
649
648
|
}
|
|
650
649
|
}
|
|
651
650
|
|
|
@@ -86,9 +86,8 @@ let svg = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
|
86
86
|
* @params {Object} [options] - Control options.
|
|
87
87
|
*/
|
|
88
88
|
class CompassButton extends Control {
|
|
89
|
-
|
|
90
89
|
/**
|
|
91
|
-
*
|
|
90
|
+
*
|
|
92
91
|
* @params {Object} [options] - Control options.
|
|
93
92
|
*/
|
|
94
93
|
constructor(options) {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module og/control/Control
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
"use strict";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Base control class for implementing renderer controls.
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
* @param {Boolean} [options.autoActivated=true] - If true - calls initialize function after the renderer assigning.
|
|
13
13
|
*/
|
|
14
14
|
class Control {
|
|
15
|
-
|
|
16
15
|
/**
|
|
17
16
|
* @param {Object} [options] - Control activation options:
|
|
18
17
|
*/
|
|
@@ -77,35 +76,35 @@ class Control {
|
|
|
77
76
|
* @public
|
|
78
77
|
* @virtual
|
|
79
78
|
*/
|
|
80
|
-
oninit() {
|
|
79
|
+
oninit() {}
|
|
81
80
|
|
|
82
81
|
/**
|
|
83
82
|
* Control renderer assigning function have to be overriden.
|
|
84
83
|
* @public
|
|
85
84
|
* @virtual
|
|
86
85
|
*/
|
|
87
|
-
onadd() {
|
|
86
|
+
onadd() {}
|
|
88
87
|
|
|
89
88
|
/**
|
|
90
89
|
* Control remove function have to be overriden.
|
|
91
90
|
* @public
|
|
92
91
|
* @virtual
|
|
93
92
|
*/
|
|
94
|
-
onremove() {
|
|
93
|
+
onremove() {}
|
|
95
94
|
|
|
96
95
|
/**
|
|
97
96
|
* Control activation function have to be overriden.
|
|
98
97
|
* @public
|
|
99
98
|
* @virtual
|
|
100
99
|
*/
|
|
101
|
-
onactivate() {
|
|
100
|
+
onactivate() {}
|
|
102
101
|
|
|
103
102
|
/**
|
|
104
103
|
* Control deactivation function have to be overriden.
|
|
105
104
|
* @public
|
|
106
105
|
* @virtual
|
|
107
106
|
*/
|
|
108
|
-
ondeactivate() {
|
|
107
|
+
ondeactivate() {}
|
|
109
108
|
|
|
110
109
|
/**
|
|
111
110
|
* Assign renderer to the control.
|
|
@@ -130,7 +129,6 @@ class Control {
|
|
|
130
129
|
* @public
|
|
131
130
|
*/
|
|
132
131
|
remove() {
|
|
133
|
-
|
|
134
132
|
this.onremove && this.onremove();
|
|
135
133
|
|
|
136
134
|
let r = this.renderer,
|
|
@@ -187,4 +185,4 @@ class Control {
|
|
|
187
185
|
}
|
|
188
186
|
}
|
|
189
187
|
|
|
190
|
-
export { Control };
|
|
188
|
+
export { Control };
|
|
@@ -13,7 +13,6 @@ import { Control } from "./Control.js";
|
|
|
13
13
|
* @param {Object} [options] - Control options.
|
|
14
14
|
*/
|
|
15
15
|
class DebugInfo extends Control {
|
|
16
|
-
|
|
17
16
|
/**
|
|
18
17
|
* @param {Object} [options] - Control options.
|
|
19
18
|
*/
|
|
@@ -94,8 +93,8 @@ class DebugInfo extends Control {
|
|
|
94
93
|
frame: () => p.camera.slope.toFixed(3)
|
|
95
94
|
},
|
|
96
95
|
{
|
|
97
|
-
label: "
|
|
98
|
-
frame: () => p.
|
|
96
|
+
label: "lodSize",
|
|
97
|
+
frame: () => Math.round(p.lodSize)
|
|
99
98
|
},
|
|
100
99
|
{
|
|
101
100
|
label: "deltaTime/FPS",
|
|
@@ -6,6 +6,7 @@ import { Quat } from "../math/Quat.js";
|
|
|
6
6
|
import { Ray } from "../math/Ray.js";
|
|
7
7
|
import { Vec3 } from "../math/Vec3.js";
|
|
8
8
|
import { Control } from "./Control.js";
|
|
9
|
+
import { Mat4 } from "../math/Mat4.js";
|
|
9
10
|
|
|
10
11
|
class Touch {
|
|
11
12
|
constructor() {
|
|
@@ -29,6 +30,7 @@ class EarthNavigation extends Control {
|
|
|
29
30
|
super(options);
|
|
30
31
|
|
|
31
32
|
this.grabbedPoint = new Vec3();
|
|
33
|
+
this.grabbedDir = new Vec3();
|
|
32
34
|
this.inertia = 0.007;
|
|
33
35
|
this.grabbedSpheroid = new Sphere();
|
|
34
36
|
this.planet = null;
|
|
@@ -39,11 +41,11 @@ class EarthNavigation extends Control {
|
|
|
39
41
|
this.currState = 0;
|
|
40
42
|
|
|
41
43
|
this.positionState = [
|
|
42
|
-
{ h: 17119745.303455353, max: 0.
|
|
43
|
-
{ h: 6866011, max: 0.
|
|
44
|
-
{ h: 3000000, max: 0.
|
|
45
|
-
{ h: 1000000, max: 0.
|
|
46
|
-
{ h: 500000, max: 0.
|
|
44
|
+
{ h: 17119745.303455353, max: 0.98, min: -0.98 },
|
|
45
|
+
{ h: 6866011, max: 0.98, min: -0.98 },
|
|
46
|
+
{ h: 3000000, max: 0.98, min: -0.98 },
|
|
47
|
+
{ h: 1000000, max: 0.98, min: -0.98 },
|
|
48
|
+
{ h: 500000, max: 0.98, min: -0.98 }
|
|
47
49
|
];
|
|
48
50
|
|
|
49
51
|
this.touches = [new Touch(), new Touch()];
|
|
@@ -163,9 +165,10 @@ class EarthNavigation extends Control {
|
|
|
163
165
|
}
|
|
164
166
|
}
|
|
165
167
|
|
|
166
|
-
onMouseLeftButtonClick() {
|
|
168
|
+
onMouseLeftButtonClick(e) {
|
|
167
169
|
this.renderer.handler.gl.canvas.classList.add("ogGrabbingPoiner");
|
|
168
170
|
this.grabbedPoint = this.planet.getCartesianFromMouseTerrain(true);
|
|
171
|
+
this.grabbedDir.copy(e.direction);
|
|
169
172
|
if (this.grabbedPoint) {
|
|
170
173
|
this.grabbedSpheroid.radius = this.grabbedPoint.length();
|
|
171
174
|
this.stopRotation();
|
|
@@ -195,24 +198,30 @@ class EarthNavigation extends Control {
|
|
|
195
198
|
var targetPoint = new Ray(cam.eye, e.direction).hitSphere(this.grabbedSpheroid);
|
|
196
199
|
|
|
197
200
|
if (targetPoint) {
|
|
198
|
-
|
|
199
|
-
|
|
201
|
+
|
|
202
|
+
this._a = Math.acos(this.grabbedPoint.y / this.grabbedSpheroid.radius) -
|
|
200
203
|
Math.acos(targetPoint.y / this.grabbedSpheroid.radius);
|
|
201
204
|
|
|
202
|
-
this._vRot = Quat.axisAngleToQuat(cam._u, this._a);
|
|
205
|
+
let rot = this._vRot = Quat.axisAngleToQuat(cam._u, this._a);
|
|
206
|
+
|
|
207
|
+
cam.set(rot.mulVec3(cam.eye), Vec3.ZERO, rot.mulVec3(cam.getUp()));
|
|
208
|
+
//cam.update();
|
|
209
|
+
|
|
203
210
|
this._hRot = Quat.getRotationBetweenVectors(
|
|
204
211
|
new Vec3(targetPoint.x, 0.0, targetPoint.z).normal(),
|
|
205
212
|
new Vec3(this.grabbedPoint.x, 0.0, this.grabbedPoint.z).normal()
|
|
206
213
|
);
|
|
207
|
-
var rot = this._hRot.mul(this._vRot);
|
|
208
214
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
215
|
+
rot = this._hRot;
|
|
216
|
+
|
|
217
|
+
//var state = this.positionState[this.currState];
|
|
218
|
+
//var lim = cam.eye.normal().dot(Vec3.UP);
|
|
219
|
+
|
|
220
|
+
//if (lim > state.max || lim < state.min) {
|
|
221
|
+
// rot = Quat.yRotation(rot.getYaw());
|
|
222
|
+
cam.set(rot.mulVec3(cam.eye), Vec3.ZERO, rot.mulVec3(cam.getUp()));
|
|
223
|
+
cam.update();
|
|
224
|
+
//}
|
|
216
225
|
}
|
|
217
226
|
} else {
|
|
218
227
|
this.scaleRot = 0;
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* @module og/control/KeyboardNavigation
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
"use strict";
|
|
6
6
|
|
|
7
|
-
import * as math from
|
|
8
|
-
import { Control } from
|
|
9
|
-
import { input } from
|
|
10
|
-
import { Vec3 } from
|
|
7
|
+
import * as math from "../math.js";
|
|
8
|
+
import { Control } from "./Control.js";
|
|
9
|
+
import { input } from "../input/input.js";
|
|
10
|
+
import { Vec3 } from "../math/Vec3.js";
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Planet camera keyboard navigation. Use W,S,A,D and left shift key for fly around a planet.
|
|
@@ -69,7 +69,7 @@ class KeyboardNavigation extends Control {
|
|
|
69
69
|
if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
|
|
70
70
|
cam.pitch(15 / this.renderer.handler.deltaTime);
|
|
71
71
|
} else {
|
|
72
|
-
cam.rotateVertical(cam._lonLat.height / 3000000 * math.RADIANS, Vec3.ZERO);
|
|
72
|
+
cam.rotateVertical((cam._lonLat.height / 3000000) * math.RADIANS, Vec3.ZERO);
|
|
73
73
|
}
|
|
74
74
|
cam.update();
|
|
75
75
|
}
|
|
@@ -79,7 +79,7 @@ class KeyboardNavigation extends Control {
|
|
|
79
79
|
if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
|
|
80
80
|
cam.pitch(-15 / this.renderer.handler.deltaTime);
|
|
81
81
|
} else {
|
|
82
|
-
cam.rotateVertical(-cam._lonLat.height / 3000000 * math.RADIANS, Vec3.ZERO);
|
|
82
|
+
cam.rotateVertical((-cam._lonLat.height / 3000000) * math.RADIANS, Vec3.ZERO);
|
|
83
83
|
}
|
|
84
84
|
cam.update();
|
|
85
85
|
}
|
|
@@ -89,7 +89,7 @@ class KeyboardNavigation extends Control {
|
|
|
89
89
|
if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
|
|
90
90
|
cam.yaw(15 / this.renderer.handler.deltaTime);
|
|
91
91
|
} else {
|
|
92
|
-
cam.rotateHorizontal(cam._lonLat.height / 3000000 * math.RADIANS, false, Vec3.ZERO);
|
|
92
|
+
cam.rotateHorizontal((cam._lonLat.height / 3000000) * math.RADIANS, false, Vec3.ZERO);
|
|
93
93
|
}
|
|
94
94
|
cam.update();
|
|
95
95
|
}
|
|
@@ -99,7 +99,7 @@ class KeyboardNavigation extends Control {
|
|
|
99
99
|
if (this.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
|
|
100
100
|
cam.yaw(-15 / this.renderer.handler.deltaTime);
|
|
101
101
|
} else {
|
|
102
|
-
cam.rotateHorizontal(-cam._lonLat.height / 3000000 * math.RADIANS, false, Vec3.ZERO);
|
|
102
|
+
cam.rotateHorizontal((-cam._lonLat.height / 3000000) * math.RADIANS, false, Vec3.ZERO);
|
|
103
103
|
}
|
|
104
104
|
cam.update();
|
|
105
105
|
}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* @module og/control/LayerSwitcher
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
"use strict";
|
|
6
6
|
|
|
7
|
-
import { Control } from
|
|
7
|
+
import { Control } from "./Control.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Simple(OpenLayers like)layer switcher, includes base layers, overlays, geo images etc. groups.
|
|
@@ -56,16 +56,16 @@ class LayerSwitcher extends Control {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
addSwitcher(type, obj, container, id) {
|
|
59
|
-
var lineDiv = document.createElement(
|
|
59
|
+
var lineDiv = document.createElement("div");
|
|
60
60
|
|
|
61
61
|
var that = this;
|
|
62
|
-
var center = document.createElement(
|
|
63
|
-
center.classList.add(
|
|
62
|
+
var center = document.createElement("div");
|
|
63
|
+
center.classList.add("ogViewExtentBtn");
|
|
64
64
|
center.onclick = function () {
|
|
65
65
|
that.planet.flyExtent(obj.getExtent());
|
|
66
66
|
};
|
|
67
67
|
|
|
68
|
-
var inp = document.createElement(
|
|
68
|
+
var inp = document.createElement("input");
|
|
69
69
|
inp.type = type;
|
|
70
70
|
inp.name = "ogBaseLayerRadiosId" + (id || "");
|
|
71
71
|
inp.checked = obj.getVisibility();
|
|
@@ -74,11 +74,12 @@ class LayerSwitcher extends Control {
|
|
|
74
74
|
obj.setVisibility(this.checked);
|
|
75
75
|
};
|
|
76
76
|
|
|
77
|
-
obj.events &&
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
obj.events &&
|
|
78
|
+
obj.events.on("visibilitychange", function (e) {
|
|
79
|
+
inp.checked = e.getVisibility();
|
|
80
|
+
});
|
|
80
81
|
|
|
81
|
-
var lbl = document.createElement(
|
|
82
|
+
var lbl = document.createElement("label");
|
|
82
83
|
lbl.className = "ogLayerSwitcherLabel";
|
|
83
84
|
lbl.innerHTML = (obj.name || obj.src || "noname") + "</br>";
|
|
84
85
|
|
|
@@ -94,35 +95,35 @@ class LayerSwitcher extends Control {
|
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
createBaseLayersContainer() {
|
|
97
|
-
var layersDiv = document.createElement(
|
|
98
|
+
var layersDiv = document.createElement("div");
|
|
98
99
|
layersDiv.className = "layersDiv";
|
|
99
100
|
this.dialog.appendChild(layersDiv);
|
|
100
101
|
|
|
101
|
-
var baseLayersLbl = document.createElement(
|
|
102
|
+
var baseLayersLbl = document.createElement("div");
|
|
102
103
|
baseLayersLbl.className = "layersDiv";
|
|
103
104
|
baseLayersLbl.innerHTML = "Base Layer";
|
|
104
105
|
layersDiv.appendChild(baseLayersLbl);
|
|
105
106
|
|
|
106
|
-
this.baseLayersDiv = document.createElement(
|
|
107
|
+
this.baseLayersDiv = document.createElement("div");
|
|
107
108
|
layersDiv.appendChild(this.baseLayersDiv);
|
|
108
109
|
}
|
|
109
110
|
|
|
110
111
|
createOverlaysContainer() {
|
|
111
|
-
var overlaysDiv = document.createElement(
|
|
112
|
+
var overlaysDiv = document.createElement("div");
|
|
112
113
|
overlaysDiv.className = "layersDiv";
|
|
113
114
|
this.dialog.appendChild(overlaysDiv);
|
|
114
115
|
|
|
115
|
-
var overlaysLbl = document.createElement(
|
|
116
|
+
var overlaysLbl = document.createElement("div");
|
|
116
117
|
overlaysLbl.className = "layersDiv";
|
|
117
118
|
overlaysLbl.innerHTML = "Overlays";
|
|
118
119
|
overlaysDiv.appendChild(overlaysLbl);
|
|
119
120
|
|
|
120
|
-
this.overlaysDiv = document.createElement(
|
|
121
|
+
this.overlaysDiv = document.createElement("div");
|
|
121
122
|
overlaysDiv.appendChild(this.overlaysDiv);
|
|
122
123
|
}
|
|
123
124
|
|
|
124
125
|
createDialog() {
|
|
125
|
-
this.dialog = document.createElement(
|
|
126
|
+
this.dialog = document.createElement("div");
|
|
126
127
|
this.dialog.id = "ogLayerSwitcherDialog";
|
|
127
128
|
this.dialog.className = "displayNone";
|
|
128
129
|
this.renderer.div.appendChild(this.dialog);
|
|
@@ -138,8 +139,8 @@ class LayerSwitcher extends Control {
|
|
|
138
139
|
}
|
|
139
140
|
|
|
140
141
|
createSwitcher() {
|
|
141
|
-
var button = document.createElement(
|
|
142
|
-
button.className =
|
|
142
|
+
var button = document.createElement("div");
|
|
143
|
+
button.className = "ogLayerSwitcherButton";
|
|
143
144
|
button.id = "ogLayerSwitcherButtonMaximize";
|
|
144
145
|
var that = this;
|
|
145
146
|
button.onclick = function (e) {
|
|
@@ -155,4 +156,4 @@ class LayerSwitcher extends Control {
|
|
|
155
156
|
}
|
|
156
157
|
}
|
|
157
158
|
|
|
158
|
-
export { LayerSwitcher };
|
|
159
|
+
export { LayerSwitcher };
|