@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
|
@@ -84,10 +84,14 @@ class RendererEvents extends Events {
|
|
|
84
84
|
ms.moving ||
|
|
85
85
|
ms.justStopped
|
|
86
86
|
);
|
|
87
|
-
},
|
|
88
|
-
/** Current mouse X position. */
|
|
87
|
+
},
|
|
88
|
+
/** Current screen mouse X position. */
|
|
89
|
+
clientX: 0,
|
|
90
|
+
/** Current screen mouse Y position. */
|
|
91
|
+
clientY: 0,
|
|
92
|
+
/** Current viewport mouse X position. */
|
|
89
93
|
x: 0,
|
|
90
|
-
/** Current mouse Y position. */
|
|
94
|
+
/** Current viewport mouse Y position. */
|
|
91
95
|
y: 0,
|
|
92
96
|
/** Current mouse X position from 0 to 1 */
|
|
93
97
|
nx: 0,
|
|
@@ -335,7 +339,7 @@ class RendererEvents extends Events {
|
|
|
335
339
|
*/
|
|
336
340
|
onMouseMove(event, sys) {
|
|
337
341
|
var ms = this.mouseState;
|
|
338
|
-
this.updateButtonsStates(sys.buttons)
|
|
342
|
+
this.updateButtonsStates(sys.buttons);
|
|
339
343
|
ms.sys = event;
|
|
340
344
|
|
|
341
345
|
let ex = event.clientX,
|
|
@@ -357,16 +361,20 @@ class RendererEvents extends Events {
|
|
|
357
361
|
this._mClkBegins = 0;
|
|
358
362
|
}
|
|
359
363
|
|
|
360
|
-
if (ms.
|
|
364
|
+
if (ms.clientX === event.clientX && ms.clientY === event.clientY) {
|
|
361
365
|
return;
|
|
362
|
-
}
|
|
366
|
+
}
|
|
363
367
|
|
|
364
|
-
ms.
|
|
365
|
-
ms.
|
|
368
|
+
ms.clientX = event.clientX;
|
|
369
|
+
ms.clientY = event.clientY;
|
|
370
|
+
|
|
371
|
+
let h = this.renderer.handler;
|
|
372
|
+
|
|
373
|
+
ms.x = event.clientX * h.pixelRatio;
|
|
374
|
+
ms.y = event.clientY * h.pixelRatio;
|
|
366
375
|
|
|
367
|
-
|
|
368
|
-
ms.
|
|
369
|
-
ms.ny = ms.y / cnv.height;
|
|
376
|
+
ms.nx = ms.x / h.canvas.width;
|
|
377
|
+
ms.ny = ms.y / h.canvas.height;
|
|
370
378
|
|
|
371
379
|
ms.moving = true;
|
|
372
380
|
|
|
@@ -492,12 +500,18 @@ class RendererEvents extends Events {
|
|
|
492
500
|
*/
|
|
493
501
|
onTouchStart(event) {
|
|
494
502
|
var ts = this.touchState;
|
|
495
|
-
ts.sys = event;
|
|
496
|
-
|
|
497
|
-
ts.
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
503
|
+
ts.sys = event;
|
|
504
|
+
|
|
505
|
+
ts.clienX = event.touches.item(0).clientX - event.offsetLeft;
|
|
506
|
+
ts.clientY = event.touches.item(0).clientY - event.offsetTop;
|
|
507
|
+
|
|
508
|
+
let h = this.renderer.handler;
|
|
509
|
+
|
|
510
|
+
ts.x = ts.clientX * h.pixelRatio;
|
|
511
|
+
ts.y = ts.clientY * h.pixelRatio;
|
|
512
|
+
|
|
513
|
+
ts.nx = ts.x / h.canvas.width;
|
|
514
|
+
ts.ny = ts.y / h.canvas.height;
|
|
501
515
|
ts.prev_x = ts.x;
|
|
502
516
|
ts.prev_y = ts.y;
|
|
503
517
|
ts.touchStart = true;
|
|
@@ -551,11 +565,17 @@ class RendererEvents extends Events {
|
|
|
551
565
|
*/
|
|
552
566
|
onTouchMove(event) {
|
|
553
567
|
var ts = this.touchState;
|
|
554
|
-
ts.
|
|
555
|
-
ts.
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
568
|
+
ts.clientX = event.touches.item(0).clientX - event.offsetLeft;
|
|
569
|
+
ts.clientY = event.touches.item(0).clientY - event.offsetTop;
|
|
570
|
+
|
|
571
|
+
var h = this.renderer.handler;
|
|
572
|
+
|
|
573
|
+
ts.x = ts.clientX * h.pixelRatio;
|
|
574
|
+
ts.y = ts.clientY * h.pixelRatio;
|
|
575
|
+
|
|
576
|
+
ts.nx = ts.x / h.canvas.width;
|
|
577
|
+
ts.ny = ts.y / h.canvas.height;
|
|
578
|
+
|
|
559
579
|
ts.sys = event;
|
|
560
580
|
ts.moving = true;
|
|
561
581
|
this._dblTchBegins = 0;
|
|
@@ -808,8 +828,10 @@ class RendererEvents extends Events {
|
|
|
808
828
|
|
|
809
829
|
if (ts.touchStart) {
|
|
810
830
|
var r = this.renderer;
|
|
811
|
-
|
|
831
|
+
|
|
832
|
+
r.pickingFramebuffer.activate();
|
|
812
833
|
r.pickingFramebuffer.readPixels(r._currPickingColor, ts.nx, 1.0 - ts.ny, 1);
|
|
834
|
+
r.pickingFramebuffer.deactivate();
|
|
813
835
|
|
|
814
836
|
var o = r.colorObjects;
|
|
815
837
|
var c = r._currPickingColor;
|
package/src/og/scene/BaseNode.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module og/scene/BaseNode
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
"use strict";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Scene node base class.
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
*/
|
|
12
12
|
class BaseNode {
|
|
13
13
|
constructor(name) {
|
|
14
|
-
|
|
15
14
|
/**
|
|
16
15
|
* Node name.
|
|
17
16
|
* @public
|
|
@@ -111,4 +110,4 @@ class BaseNode {
|
|
|
111
110
|
}
|
|
112
111
|
}
|
|
113
112
|
|
|
114
|
-
export { BaseNode };
|
|
113
|
+
export { BaseNode };
|
package/src/og/scene/Planet.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
|
+
import * as utils from "../utils/shared.js";
|
|
7
8
|
import * as shaders from "../shaders/drawnode.js";
|
|
8
9
|
import * as math from "../math.js";
|
|
9
10
|
import * as mercator from "../mercator.js";
|
|
@@ -31,14 +32,16 @@ import { wgs84 } from "../ellipsoid/wgs84.js";
|
|
|
31
32
|
import { NIGHT, SPECULAR } from "../res/images.js";
|
|
32
33
|
import { Geoid } from "../terrain/Geoid.js";
|
|
33
34
|
import { isUndef } from "../utils/shared.js";
|
|
35
|
+
import { MAX_RENDERED_NODES } from "../quadTree/quadTree.js";
|
|
34
36
|
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
+
const CUR_LOD_SIZE = 250; //px
|
|
38
|
+
const MIN_LOD_SIZE = 312; //px
|
|
39
|
+
const MAX_LOD_SIZE = 190; //px
|
|
37
40
|
|
|
38
41
|
let _tempPickingPix_ = new Uint8Array(4),
|
|
39
42
|
_tempDepthColor_ = new Uint8Array(4);
|
|
40
43
|
|
|
41
|
-
const DEPTH_DISTANCE = 11
|
|
44
|
+
const DEPTH_DISTANCE = 11;//m
|
|
42
45
|
|
|
43
46
|
/**
|
|
44
47
|
* Maximum created nodes count. The more nodes count the more memory usage.
|
|
@@ -48,6 +51,8 @@ const DEPTH_DISTANCE = 11;
|
|
|
48
51
|
*/
|
|
49
52
|
const MAX_NODES = 200;
|
|
50
53
|
|
|
54
|
+
const HORIZON_TANGENT = 0.81;
|
|
55
|
+
|
|
51
56
|
const EVENT_NAMES = [
|
|
52
57
|
/**
|
|
53
58
|
* Triggered before globe frame begins to render.
|
|
@@ -93,7 +98,7 @@ const EVENT_NAMES = [
|
|
|
93
98
|
* @param {string} [options.name="Earth"] - Planet name(Earth by default)
|
|
94
99
|
* @param {Ellipsoid} [options.ellipsoid] - Planet ellipsoid(WGS84 by default)
|
|
95
100
|
* @param {Number} [options.maxGridSize=128] - Segment maximal grid size
|
|
96
|
-
* @param {Number} [options.maxEqualZoomAltitude=
|
|
101
|
+
* @param {Number} [options.maxEqualZoomAltitude=15000000.0] - Maximal altitude since segments on the screen bacame the same zoom level
|
|
97
102
|
* @param {Number} [options.minEqualZoomAltitude=10000.0] - Minimal altitude since segments on the screen bacame the same zoom level
|
|
98
103
|
* @param {Number} [options.minEqualZoomCameraSlope=0.8] - Minimal camera slope above te globe where segments on the screen bacame the same zoom level
|
|
99
104
|
* @fires og.scene.Planet#draw
|
|
@@ -107,6 +112,13 @@ export class Planet extends RenderNode {
|
|
|
107
112
|
constructor(options = {}) {
|
|
108
113
|
super(options.name);
|
|
109
114
|
|
|
115
|
+
this._cameraFrustums = options.frustums || [
|
|
116
|
+
[1, 100 + 0.075],
|
|
117
|
+
[100, 1000 + 0.075],
|
|
118
|
+
[1000, 1e6 + 10000],
|
|
119
|
+
[1e6, 1e9]
|
|
120
|
+
];
|
|
121
|
+
|
|
110
122
|
/**
|
|
111
123
|
* @public
|
|
112
124
|
* @type {Ellipsoid}
|
|
@@ -180,7 +192,7 @@ export class Planet extends RenderNode {
|
|
|
180
192
|
this._minAltitude = options.minAltitude;
|
|
181
193
|
this._maxAltitude = options.maxAltitude;
|
|
182
194
|
|
|
183
|
-
this.maxEqualZoomAltitude = options.maxEqualZoomAltitude ||
|
|
195
|
+
this.maxEqualZoomAltitude = options.maxEqualZoomAltitude || 15000000.0;
|
|
184
196
|
this.minEqualZoomAltitude = options.minEqualZoomAltitude || 10000.0;
|
|
185
197
|
this.minEqualZoomCameraSlope = options.minEqualZoomCameraSlope || 0.8;
|
|
186
198
|
|
|
@@ -335,6 +347,16 @@ export class Planet extends RenderNode {
|
|
|
335
347
|
*/
|
|
336
348
|
this._specularTexture = null;
|
|
337
349
|
|
|
350
|
+
//TODO: replace to a function
|
|
351
|
+
let a = utils.createColorRGB(options.ambient, new Vec3(0.2, 0.2, 0.2));
|
|
352
|
+
let d = utils.createColorRGB(options.diffuse, new Vec3(0.8, 0.8, 0.8));
|
|
353
|
+
let s = utils.createColorRGB(options.specular, new Vec3(0.0003, 0.0003, 0.0003));
|
|
354
|
+
let shininess = options.shininess || 20.0;
|
|
355
|
+
|
|
356
|
+
this._ambient = new Float32Array([a.x, a.y, a.z]);
|
|
357
|
+
this._diffuse = new Float32Array([d.x, d.y, d.z]);
|
|
358
|
+
this._specular = new Float32Array([s.x, s.y, s.z, shininess]);
|
|
359
|
+
|
|
338
360
|
/**
|
|
339
361
|
* True for rendering night glowing texture.
|
|
340
362
|
* @protected
|
|
@@ -367,18 +389,12 @@ export class Planet extends RenderNode {
|
|
|
367
389
|
* @public
|
|
368
390
|
* @type {number}
|
|
369
391
|
*/
|
|
370
|
-
this.
|
|
371
|
-
this.
|
|
372
|
-
this.
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
this.
|
|
376
|
-
this._specularMaterialArr = new Float32Array(this.SLICE_SIZE_4 + 4);
|
|
377
|
-
|
|
378
|
-
this._tileOffsetArr = new Float32Array(this.SLICE_SIZE_4);
|
|
379
|
-
this._visibleExtentOffsetArr = new Float32Array(this.SLICE_SIZE_4);
|
|
380
|
-
this._transparentColorArr = new Float32Array(this.SLICE_SIZE_4);
|
|
381
|
-
this._pickingColorArr = new Float32Array(this.SLICE_SIZE_3);
|
|
392
|
+
this._lodSize = CUR_LOD_SIZE;
|
|
393
|
+
this._curLodSize = CUR_LOD_SIZE;
|
|
394
|
+
this._minLodSize = MIN_LOD_SIZE;
|
|
395
|
+
this._maxLodSize = MAX_LOD_SIZE;
|
|
396
|
+
|
|
397
|
+
this._pickingColorArr = new Float32Array(this.SLICE_SIZE_4);
|
|
382
398
|
this._samplerArr = new Int32Array(this.SLICE_SIZE);
|
|
383
399
|
this._pickingMaskArr = new Int32Array(this.SLICE_SIZE);
|
|
384
400
|
|
|
@@ -393,11 +409,11 @@ export class Planet extends RenderNode {
|
|
|
393
409
|
|
|
394
410
|
this._normalMapCreator = null;
|
|
395
411
|
|
|
396
|
-
this._terrainWorker = new TerrainWorker(
|
|
412
|
+
this._terrainWorker = new TerrainWorker(3);
|
|
397
413
|
|
|
398
|
-
this._plainSegmentWorker = new PlainSegmentWorker(
|
|
414
|
+
this._plainSegmentWorker = new PlainSegmentWorker(4);
|
|
399
415
|
|
|
400
|
-
this._tileLoader = new Loader(
|
|
416
|
+
this._tileLoader = new Loader(options.loadingBatchSize || 12);
|
|
401
417
|
|
|
402
418
|
this._memKey = new Key();
|
|
403
419
|
|
|
@@ -429,11 +445,14 @@ export class Planet extends RenderNode {
|
|
|
429
445
|
control.addTo(this.renderer);
|
|
430
446
|
}
|
|
431
447
|
|
|
432
|
-
|
|
433
|
-
this.
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
448
|
+
get lodSize() {
|
|
449
|
+
return this._lodSize;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
setLodSize(currentLodSize, minLodSize, maxLodSize) {
|
|
453
|
+
this._maxLodSize = maxLodSize || this._maxLodSize;
|
|
454
|
+
this._minLodSize = minLodSize || this._minLodSize;
|
|
455
|
+
this._curLodSize = currentLodSize || this._curLodSize;
|
|
437
456
|
this._renderCompletedActivated = false;
|
|
438
457
|
}
|
|
439
458
|
|
|
@@ -619,11 +638,8 @@ export class Planet extends RenderNode {
|
|
|
619
638
|
var h = this.renderer.handler;
|
|
620
639
|
|
|
621
640
|
h.addProgram(shaders.drawnode_screen_nl(), true);
|
|
622
|
-
|
|
623
641
|
//h.addProgram(shaders.drawnode_screen_wl(), true);
|
|
624
|
-
|
|
625
642
|
h.addProgram(shaders.drawnode_screen_wl_webgl2(), true);
|
|
626
|
-
|
|
627
643
|
h.addProgram(shaders.drawnode_colorPicking(), true);
|
|
628
644
|
h.addProgram(shaders.drawnode_depth(), true);
|
|
629
645
|
h.addProgram(shaders.drawnode_heightPicking(), true);
|
|
@@ -716,6 +732,7 @@ export class Planet extends RenderNode {
|
|
|
716
732
|
this.transparentTexture = this.renderer.handler.transparentTexture;
|
|
717
733
|
|
|
718
734
|
this.camera = this.renderer.activeCamera = new PlanetCamera(this, {
|
|
735
|
+
frustums: this._cameraFrustums,
|
|
719
736
|
eye: new Vec3(0, 0, 28000000),
|
|
720
737
|
look: new Vec3(0, 0, 0),
|
|
721
738
|
up: new Vec3(0, 1, 0),
|
|
@@ -731,31 +748,13 @@ export class Planet extends RenderNode {
|
|
|
731
748
|
}
|
|
732
749
|
|
|
733
750
|
// Creating quad trees nodes
|
|
734
|
-
this._quadTree = new Node(
|
|
735
|
-
Segment,
|
|
736
|
-
this,
|
|
737
|
-
quadTree.NW,
|
|
738
|
-
null,
|
|
739
|
-
0,
|
|
740
|
-
0,
|
|
751
|
+
this._quadTree = new Node(Segment, this, quadTree.NW, null, 0, 0,
|
|
741
752
|
Extent.createFromArray([-20037508.34, -20037508.34, 20037508.34, 20037508.34])
|
|
742
753
|
);
|
|
743
|
-
this._quadTreeNorth = new Node(
|
|
744
|
-
SegmentLonLat,
|
|
745
|
-
this,
|
|
746
|
-
quadTree.NW,
|
|
747
|
-
null,
|
|
748
|
-
0,
|
|
749
|
-
0,
|
|
754
|
+
this._quadTreeNorth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0,
|
|
750
755
|
Extent.createFromArray([-180, mercator.MAX_LAT, 180, 90])
|
|
751
756
|
);
|
|
752
|
-
this._quadTreeSouth = new Node(
|
|
753
|
-
SegmentLonLat,
|
|
754
|
-
this,
|
|
755
|
-
quadTree.NW,
|
|
756
|
-
null,
|
|
757
|
-
0,
|
|
758
|
-
0,
|
|
757
|
+
this._quadTreeSouth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0,
|
|
759
758
|
Extent.createFromArray([-180, -90, 180, mercator.MIN_LAT])
|
|
760
759
|
);
|
|
761
760
|
|
|
@@ -771,7 +770,7 @@ export class Planet extends RenderNode {
|
|
|
771
770
|
// loading Earth night glowing texture
|
|
772
771
|
if (this._useNightTexture) {
|
|
773
772
|
createImageBitmap(NIGHT).then(
|
|
774
|
-
(e) => (this._nightTexture = this.renderer.handler.
|
|
773
|
+
(e) => (this._nightTexture = this.renderer.handler.createTextureDefault(e))
|
|
775
774
|
);
|
|
776
775
|
}
|
|
777
776
|
|
|
@@ -998,16 +997,10 @@ export class Planet extends RenderNode {
|
|
|
998
997
|
_collectRenderNodes() {
|
|
999
998
|
let cam = this.camera;
|
|
1000
999
|
|
|
1001
|
-
this.
|
|
1002
|
-
cam.slope < 0.0 ? 0.0 : cam.slope,
|
|
1003
|
-
this._maxLodRatio,
|
|
1004
|
-
this._minLodRatio
|
|
1005
|
-
);
|
|
1000
|
+
this._lodSize = math.lerp(cam.slope < 0.0 ? 0.0 : cam.slope, this._curLodSize, this._minLodSize);
|
|
1006
1001
|
|
|
1007
1002
|
cam._insideSegment = null;
|
|
1008
1003
|
|
|
1009
|
-
this._nodeCounterError_ = 0;
|
|
1010
|
-
|
|
1011
1004
|
// clear first
|
|
1012
1005
|
this._clearRenderedNodeList();
|
|
1013
1006
|
|
|
@@ -1022,11 +1015,11 @@ export class Planet extends RenderNode {
|
|
|
1022
1015
|
|
|
1023
1016
|
this._quadTree.renderTree(cam, 0, null);
|
|
1024
1017
|
|
|
1025
|
-
if (
|
|
1026
|
-
cam.slope > this.minEqualZoomCameraSlope &&
|
|
1018
|
+
if (cam.slope > this.minEqualZoomCameraSlope &&
|
|
1027
1019
|
cam._lonLat.height < this.maxEqualZoomAltitude &&
|
|
1028
1020
|
cam._lonLat.height > this.minEqualZoomAltitude
|
|
1029
1021
|
) {
|
|
1022
|
+
|
|
1030
1023
|
this.minCurrZoom = this.maxCurrZoom;
|
|
1031
1024
|
|
|
1032
1025
|
let temp = this._renderedNodes,
|
|
@@ -1043,7 +1036,8 @@ export class Planet extends RenderNode {
|
|
|
1043
1036
|
|
|
1044
1037
|
for (var i = 0, len = temp.length; i < len; i++) {
|
|
1045
1038
|
var ri = temp[i];
|
|
1046
|
-
|
|
1039
|
+
let ht = ri.segment.centerNormal.dot(cam._b);
|
|
1040
|
+
if (ri.segment.tileZoom === this.maxCurrZoom || ht < HORIZON_TANGENT) {
|
|
1047
1041
|
this._renderedNodes.push(ri);
|
|
1048
1042
|
let k = 0,
|
|
1049
1043
|
inFrustum = ri.inFrustum;
|
|
@@ -1124,7 +1118,7 @@ export class Planet extends RenderNode {
|
|
|
1124
1118
|
gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
1125
1119
|
|
|
1126
1120
|
if (frustumIndex === cam.FARTHEST_FRUSTUM_INDEX) {
|
|
1127
|
-
if (this._skipPreRender && (!this._renderCompletedActivated || cam.isMoved)) {
|
|
1121
|
+
if (this._skipPreRender/* && (!this._renderCompletedActivated || cam.isMoved)*/) {
|
|
1128
1122
|
this._collectRenderNodes();
|
|
1129
1123
|
}
|
|
1130
1124
|
this._skipPreRender = true;
|
|
@@ -1147,12 +1141,12 @@ export class Planet extends RenderNode {
|
|
|
1147
1141
|
this._vectorTileCreator.frame();
|
|
1148
1142
|
}
|
|
1149
1143
|
|
|
1150
|
-
gl.blendEquation(gl.FUNC_ADD);
|
|
1151
1144
|
|
|
1152
|
-
gl.
|
|
1145
|
+
gl.enable(gl.CULL_FACE);
|
|
1153
1146
|
|
|
1154
1147
|
gl.enable(gl.BLEND);
|
|
1155
|
-
gl.
|
|
1148
|
+
gl.blendEquation(gl.FUNC_ADD);
|
|
1149
|
+
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
1156
1150
|
|
|
1157
1151
|
if (this.lightEnabled) {
|
|
1158
1152
|
h.programs.drawnode_screen_wl.activate();
|
|
@@ -1165,13 +1159,14 @@ export class Planet extends RenderNode {
|
|
|
1165
1159
|
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1166
1160
|
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
1167
1161
|
|
|
1162
|
+
gl.uniform3fv(shu.diffuse, this._diffuse);
|
|
1163
|
+
gl.uniform3fv(shu.ambient, this._ambient);
|
|
1164
|
+
gl.uniform4fv(shu.specular, this._specular);
|
|
1165
|
+
|
|
1168
1166
|
// bind night glowing material
|
|
1169
1167
|
gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
|
|
1170
|
-
gl.bindTexture(
|
|
1171
|
-
|
|
1172
|
-
(this.camera._lonLat.height > 329958.0 &&
|
|
1173
|
-
(this._nightTexture || this.transparentTexture)) ||
|
|
1174
|
-
this.transparentTexture
|
|
1168
|
+
gl.bindTexture(gl.TEXTURE_2D,
|
|
1169
|
+
(this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture
|
|
1175
1170
|
);
|
|
1176
1171
|
gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
|
|
1177
1172
|
|
|
@@ -1180,34 +1175,6 @@ export class Planet extends RenderNode {
|
|
|
1180
1175
|
gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
|
|
1181
1176
|
gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
|
|
1182
1177
|
|
|
1183
|
-
var b = this.baseLayer;
|
|
1184
|
-
if (b) {
|
|
1185
|
-
this._diffuseMaterialArr[0] = b.diffuse.x;
|
|
1186
|
-
this._diffuseMaterialArr[1] = b.diffuse.y;
|
|
1187
|
-
this._diffuseMaterialArr[2] = b.diffuse.z;
|
|
1188
|
-
|
|
1189
|
-
this._ambientMaterialArr[0] = b.ambient.x;
|
|
1190
|
-
this._ambientMaterialArr[1] = b.ambient.y;
|
|
1191
|
-
this._ambientMaterialArr[2] = b.ambient.z;
|
|
1192
|
-
|
|
1193
|
-
this._specularMaterialArr[0] = b.specular.x;
|
|
1194
|
-
this._specularMaterialArr[1] = b.specular.y;
|
|
1195
|
-
this._specularMaterialArr[2] = b.specular.z;
|
|
1196
|
-
this._specularMaterialArr[3] = b.shininess;
|
|
1197
|
-
} else {
|
|
1198
|
-
this._diffuseMaterialArr[0] = 0.89;
|
|
1199
|
-
this._diffuseMaterialArr[1] = 0.9;
|
|
1200
|
-
this._diffuseMaterialArr[2] = 0.83;
|
|
1201
|
-
|
|
1202
|
-
this._ambientMaterialArr[0] = 0.0;
|
|
1203
|
-
this._ambientMaterialArr[1] = 0.0;
|
|
1204
|
-
this._ambientMaterialArr[2] = 0.0;
|
|
1205
|
-
|
|
1206
|
-
this._specularMaterialArr[0] = 0.0003;
|
|
1207
|
-
this._specularMaterialArr[1] = 0.00012;
|
|
1208
|
-
this._specularMaterialArr[2] = 0.00001;
|
|
1209
|
-
this._specularMaterialArr[3] = 20.0;
|
|
1210
|
-
}
|
|
1211
1178
|
} else {
|
|
1212
1179
|
h.programs.drawnode_screen_nl.activate();
|
|
1213
1180
|
sh = h.programs.drawnode_screen_nl._program;
|
|
@@ -1266,63 +1233,45 @@ export class Planet extends RenderNode {
|
|
|
1266
1233
|
* @protected
|
|
1267
1234
|
*/
|
|
1268
1235
|
_renderHeightPickingFramebufferPASS() {
|
|
1269
|
-
this.
|
|
1270
|
-
|
|
1271
|
-
let sh;
|
|
1272
|
-
let renderer = this.renderer;
|
|
1273
|
-
let h = renderer.handler;
|
|
1274
|
-
let gl = h.gl;
|
|
1275
|
-
let cam = renderer.activeCamera;
|
|
1276
|
-
let frustumIndex = cam.getCurrentFrustum();
|
|
1236
|
+
if (!this.terrain.isEmpty) {
|
|
1277
1237
|
|
|
1278
|
-
|
|
1279
|
-
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
1280
|
-
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
1281
|
-
} else {
|
|
1282
|
-
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
1283
|
-
}
|
|
1238
|
+
this._heightPickingFramebuffer.activate();
|
|
1284
1239
|
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1240
|
+
let sh;
|
|
1241
|
+
let renderer = this.renderer;
|
|
1242
|
+
let h = renderer.handler;
|
|
1243
|
+
let gl = h.gl;
|
|
1244
|
+
let cam = renderer.activeCamera;
|
|
1245
|
+
let frustumIndex = cam.getCurrentFrustum();
|
|
1289
1246
|
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1247
|
+
if (frustumIndex === cam.FARTHEST_FRUSTUM_INDEX) {
|
|
1248
|
+
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
1249
|
+
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
1250
|
+
} else {
|
|
1251
|
+
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
1252
|
+
}
|
|
1293
1253
|
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
shu.
|
|
1297
|
-
false,
|
|
1298
|
-
renderer.activeCamera.getProjectionMatrix()
|
|
1299
|
-
);
|
|
1254
|
+
h.programs.drawnode_heightPicking.activate();
|
|
1255
|
+
sh = h.programs.drawnode_heightPicking._program;
|
|
1256
|
+
let shu = sh.uniforms;
|
|
1300
1257
|
|
|
1301
|
-
|
|
1302
|
-
|
|
1258
|
+
gl.uniformMatrix4fv(shu.viewMatrix, false, renderer.activeCamera.getViewMatrix());
|
|
1259
|
+
gl.uniformMatrix4fv(shu.projectionMatrix, false, renderer.activeCamera.getProjectionMatrix());
|
|
1303
1260
|
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
sl = this._visibleTileLayerSlices;
|
|
1261
|
+
gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
|
|
1262
|
+
gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
|
|
1307
1263
|
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
}
|
|
1264
|
+
// drawing planet nodes
|
|
1265
|
+
var rn = this._renderedNodesInFrustum[frustumIndex],
|
|
1266
|
+
sl = this._visibleTileLayerSlices;
|
|
1312
1267
|
|
|
1313
|
-
|
|
1314
|
-
for (let j = 1, len = sl.length; j < len; j++) {
|
|
1315
|
-
i = rn.length;
|
|
1316
|
-
//gl.polygonOffset(0, -j);
|
|
1268
|
+
let i = rn.length;
|
|
1317
1269
|
while (i--) {
|
|
1318
|
-
rn[i].segment.heightPickingRendering(sh, sl[
|
|
1270
|
+
rn[i].segment.heightPickingRendering(sh, sl[0]);
|
|
1319
1271
|
}
|
|
1320
|
-
}
|
|
1321
|
-
//gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
1322
1272
|
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
this._heightPickingFramebuffer.deactivate();
|
|
1273
|
+
this._heightPickingFramebuffer.deactivate();
|
|
1274
|
+
}
|
|
1326
1275
|
}
|
|
1327
1276
|
|
|
1328
1277
|
/**
|
|
@@ -1385,6 +1334,7 @@ export class Planet extends RenderNode {
|
|
|
1385
1334
|
let cam = renderer.activeCamera;
|
|
1386
1335
|
|
|
1387
1336
|
gl.disable(gl.BLEND);
|
|
1337
|
+
gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
1388
1338
|
|
|
1389
1339
|
gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
|
|
1390
1340
|
gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
|
|
@@ -1400,16 +1350,7 @@ export class Planet extends RenderNode {
|
|
|
1400
1350
|
|
|
1401
1351
|
let i = rn.length;
|
|
1402
1352
|
while (i--) {
|
|
1403
|
-
rn[i].segment.depthRendering(sh, sl[0]
|
|
1404
|
-
}
|
|
1405
|
-
|
|
1406
|
-
gl.enable(gl.POLYGON_OFFSET_FILL);
|
|
1407
|
-
for (let j = 1, len = sl.length; j < len; j++) {
|
|
1408
|
-
i = rn.length;
|
|
1409
|
-
gl.polygonOffset(0, -j);
|
|
1410
|
-
while (i--) {
|
|
1411
|
-
rn[i].segment.depthRendering(sh, sl[j], j, this.transparentTexture, true);
|
|
1412
|
-
}
|
|
1353
|
+
rn[i].segment.depthRendering(sh, sl[0]);
|
|
1413
1354
|
}
|
|
1414
1355
|
}
|
|
1415
1356
|
|
|
@@ -1509,12 +1450,11 @@ export class Planet extends RenderNode {
|
|
|
1509
1450
|
* Returns 3d cartesian coordinates on the relief planet by mouse cursor
|
|
1510
1451
|
* position or null if mouse cursor is outside the planet.
|
|
1511
1452
|
* @public
|
|
1512
|
-
* @param {Boolean} [force=false] - Force framebuffer rendering.
|
|
1513
1453
|
* @returns {Vec3} -
|
|
1514
1454
|
*/
|
|
1515
|
-
getCartesianFromMouseTerrain(
|
|
1455
|
+
getCartesianFromMouseTerrain() {
|
|
1516
1456
|
var ms = this.renderer.events.mouseState;
|
|
1517
|
-
var distance = this.getDistanceFromPixel(ms
|
|
1457
|
+
var distance = this.getDistanceFromPixel(ms);
|
|
1518
1458
|
if (distance) {
|
|
1519
1459
|
return ms.direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
|
|
1520
1460
|
}
|
|
@@ -1529,8 +1469,8 @@ export class Planet extends RenderNode {
|
|
|
1529
1469
|
* @param {Boolean} [force=false] - Force framebuffer rendering.
|
|
1530
1470
|
* @returns {Vec3} -
|
|
1531
1471
|
*/
|
|
1532
|
-
getCartesianFromPixelTerrain(px
|
|
1533
|
-
var distance = this.getDistanceFromPixel(px
|
|
1472
|
+
getCartesianFromPixelTerrain(px) {
|
|
1473
|
+
var distance = this.getDistanceFromPixel(px);
|
|
1534
1474
|
if (distance) {
|
|
1535
1475
|
var direction = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1536
1476
|
return direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
|
|
@@ -1601,40 +1541,48 @@ export class Planet extends RenderNode {
|
|
|
1601
1541
|
* @returns {number} -
|
|
1602
1542
|
*/
|
|
1603
1543
|
getDistanceFromPixel(px) {
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
if (!(_tempPickingPix_[0] || _tempPickingPix_[1] || _tempPickingPix_[2])) {
|
|
1618
|
-
dist = this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1619
|
-
} else if (dist < DEPTH_DISTANCE) {
|
|
1620
|
-
r.screenDepthFramebuffer.activate();
|
|
1621
|
-
r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy, 0);
|
|
1622
|
-
r.screenDepthFramebuffer.deactivate();
|
|
1623
|
-
|
|
1624
|
-
let screenPos = new Vec4(
|
|
1625
|
-
spx * 2.0 - 1.0,
|
|
1626
|
-
spy * 2.0 - 1.0,
|
|
1627
|
-
(_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
|
|
1628
|
-
1.0 * 2.0 - 1.0
|
|
1629
|
-
);
|
|
1630
|
-
let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
|
|
1631
|
-
let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1632
|
-
dist =
|
|
1633
|
-
-(viewPosition.z / viewPosition.w) /
|
|
1634
|
-
dir.dot(this.renderer.activeCamera.getForward());
|
|
1635
|
-
}
|
|
1544
|
+
if (this.terrain.isEmpty) {
|
|
1545
|
+
return this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1546
|
+
} else {
|
|
1547
|
+
|
|
1548
|
+
let r = this.renderer,
|
|
1549
|
+
cnv = this.renderer.handler.canvas;
|
|
1550
|
+
|
|
1551
|
+
let spx = px.x / cnv.width,
|
|
1552
|
+
spy = (cnv.height - px.y) / cnv.height;
|
|
1553
|
+
|
|
1554
|
+
_tempPickingPix_[0] = _tempPickingPix_[1] = _tempPickingPix_[2] = 0.0;
|
|
1555
|
+
|
|
1556
|
+
let dist = 0;
|
|
1636
1557
|
|
|
1637
|
-
|
|
1558
|
+
// HEIGHT
|
|
1559
|
+
this._heightPickingFramebuffer.activate();
|
|
1560
|
+
if (this._heightPickingFramebuffer.isComplete()) {
|
|
1561
|
+
this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
|
|
1562
|
+
dist = decodeFloatFromRGBAArr(_tempPickingPix_);
|
|
1563
|
+
}
|
|
1564
|
+
this._heightPickingFramebuffer.deactivate();
|
|
1565
|
+
|
|
1566
|
+
if (!(_tempPickingPix_[0] || _tempPickingPix_[1] || _tempPickingPix_[2])) {
|
|
1567
|
+
dist = this.getDistanceFromPixelEllipsoid(px) || 0;
|
|
1568
|
+
} else if (dist < DEPTH_DISTANCE) {
|
|
1569
|
+
r.screenDepthFramebuffer.activate();
|
|
1570
|
+
if (r.screenDepthFramebuffer.isComplete()) {
|
|
1571
|
+
r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
|
|
1572
|
+
let screenPos = new Vec4(
|
|
1573
|
+
spx * 2.0 - 1.0,
|
|
1574
|
+
spy * 2.0 - 1.0,
|
|
1575
|
+
(_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
|
|
1576
|
+
1.0 * 2.0 - 1.0
|
|
1577
|
+
);
|
|
1578
|
+
let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
|
|
1579
|
+
let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
|
|
1580
|
+
dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
|
|
1581
|
+
}
|
|
1582
|
+
r.screenDepthFramebuffer.deactivate();
|
|
1583
|
+
}
|
|
1584
|
+
return dist;
|
|
1585
|
+
}
|
|
1638
1586
|
}
|
|
1639
1587
|
|
|
1640
1588
|
/**
|