@openglobus/og 0.13.10 → 0.14.1

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.
Files changed (83) hide show
  1. package/README.md +1 -4
  2. package/css/og.css +1 -1
  3. package/dist/@openglobus/og.css +1 -1
  4. package/dist/@openglobus/og.esm.js +2 -2
  5. package/dist/@openglobus/og.esm.js.map +1 -1
  6. package/dist/@openglobus/og.umd.js +2 -2
  7. package/dist/@openglobus/og.umd.js.map +1 -1
  8. package/package.json +2 -2
  9. package/src/og/Globe.js +14 -4
  10. package/src/og/camera/Camera.js +7 -7
  11. package/src/og/camera/PlanetCamera.js +1 -1
  12. package/src/og/control/LayerSwitcher.js +48 -31
  13. package/src/og/control/MouseNavigation.js +2 -2
  14. package/src/og/control/ScaleControl.js +30 -10
  15. package/src/og/control/SimpleSkyBackground.js +184 -0
  16. package/src/og/control/Sun.js +3 -2
  17. package/src/og/ellipsoid/Ellipsoid.js +119 -92
  18. package/src/og/ellipsoid/wgs84.js +13 -13
  19. package/src/og/entity/Entity.js +3 -3
  20. package/src/og/entity/GeometryHandler.js +1341 -1337
  21. package/src/og/entity/LabelHandler.js +1 -4
  22. package/src/og/entity/LabelWorker.js +10 -13
  23. package/src/og/entity/Polyline.js +0 -16
  24. package/src/og/entity/Ray.js +0 -10
  25. package/src/og/entity/RayHandler.js +3 -44
  26. package/src/og/entity/Strip.js +1 -6
  27. package/src/og/index.js +106 -95
  28. package/src/og/layer/GeoVideo.js +1 -0
  29. package/src/og/layer/Layer.js +62 -3
  30. package/src/og/layer/XYZ.js +4 -3
  31. package/src/og/math/Line3.js +140 -139
  32. package/src/og/math/Plane.js +118 -117
  33. package/src/og/math/Ray.js +242 -239
  34. package/src/og/math/Vec3.js +56 -37
  35. package/src/og/math/Vec4.js +3 -4
  36. package/src/og/math.js +21 -21
  37. package/src/og/quadTree/EarthQuadTreeStrategy.js +29 -0
  38. package/src/og/quadTree/MarsQuadTreeStrategy.js +27 -0
  39. package/src/og/quadTree/Node.js +55 -218
  40. package/src/og/quadTree/QuadTreeStrategy.js +93 -0
  41. package/src/og/quadTree/Wgs84QuadTreeStrategy.js +26 -0
  42. package/src/og/renderer/Renderer.js +13 -12
  43. package/src/og/renderer/RendererEvents.js +1065 -1065
  44. package/src/og/scene/Planet.js +84 -273
  45. package/src/og/segment/Segment.js +18 -25
  46. package/src/og/segment/SegmentLonLat.js +34 -31
  47. package/src/og/segment/SegmentLonLatWgs84.js +41 -0
  48. package/src/og/shaders/ray.js +13 -6
  49. package/src/og/shaders/toneMapping.js +5 -5
  50. package/src/og/terrain/GlobusTerrain.js +3 -2
  51. package/src/og/terrain/MapboxTerrain.js +231 -52
  52. package/src/og/utils/quadTreeType.js +11 -0
  53. package/src/og/utils/shared.js +942 -942
  54. package/src/og/webgl/Handler.js +22 -9
  55. package/types/Globe.d.ts +7 -0
  56. package/types/camera/Camera.d.ts +3 -3
  57. package/types/camera/PlanetCamera.d.ts +1 -1
  58. package/types/control/LayerSwitcher.d.ts +1 -1
  59. package/types/control/ScaleControl.d.ts +2 -1
  60. package/types/control/SimpleSkyBackground.d.ts +11 -0
  61. package/types/control/Sun.d.ts +2 -1
  62. package/types/ellipsoid/Ellipsoid.d.ts +3 -2
  63. package/types/entity/LabelWorker.d.ts +1 -1
  64. package/types/entity/Ray.d.ts +0 -3
  65. package/types/entity/RayHandler.d.ts +0 -4
  66. package/types/index.d.ts +6 -1
  67. package/types/layer/Layer.d.ts +8 -0
  68. package/types/math/Vec3.d.ts +19 -16
  69. package/types/math/Vec4.d.ts +2 -3
  70. package/types/math.d.ts +20 -20
  71. package/types/quadTree/EarthQuadTreeStrategy.d.ts +3 -0
  72. package/types/quadTree/MarsQuadTreeStrategy.d.ts +3 -0
  73. package/types/quadTree/Node.d.ts +0 -1
  74. package/types/quadTree/QuadTreeStrategy.d.ts +21 -0
  75. package/types/quadTree/Wgs84QuadTreeStrategy.d.ts +3 -0
  76. package/types/renderer/Renderer.d.ts +1 -1
  77. package/types/scene/Planet.d.ts +6 -24
  78. package/types/segment/Segment.d.ts +4 -4
  79. package/types/segment/SegmentLonLat.d.ts +6 -2
  80. package/types/segment/SegmentLonLatWgs84.d.ts +4 -0
  81. package/types/terrain/MapboxTerrain.d.ts +2 -1
  82. package/types/utils/quadTreeType.d.ts +8 -0
  83. package/types/webgl/Handler.d.ts +4 -1
@@ -8,7 +8,6 @@ import * as utils from "../utils/shared.js";
8
8
  import * as shaders from "../shaders/drawnode.js";
9
9
  import * as math from "../math.js";
10
10
  import * as mercator from "../mercator.js";
11
- import * as quadTree from "../quadTree/quadTree.js";
12
11
  import * as segmentHelper from "../segment/segmentHelper.js";
13
12
  import { decodeFloatFromRGBAArr } from "../math/coder.js";
14
13
  import { Extent } from "../Extent.js";
@@ -31,15 +30,15 @@ import { VectorTileCreator } from "../utils/VectorTileCreator.js";
31
30
  import { wgs84 } from "../ellipsoid/wgs84.js";
32
31
  import { NIGHT, SPECULAR } from "../res/images.js";
33
32
  import { Geoid } from "../terrain/Geoid.js";
34
- import { isUndef } from "../utils/shared.js";
33
+ import { createColorRGB, isUndef } from "../utils/shared.js";
35
34
  import { MAX_RENDERED_NODES } from "../quadTree/quadTree.js";
35
+ import { EarthQuadTreeStrategy } from "../quadTree/EarthQuadTreeStrategy.js";
36
36
 
37
37
  const CUR_LOD_SIZE = 250; //px
38
38
  const MIN_LOD_SIZE = 312; //px
39
39
  const MAX_LOD_SIZE = 190; //px
40
40
 
41
- let _tempPickingPix_ = new Uint8Array(4),
42
- _tempDepthColor_ = new Uint8Array(4);
41
+ let _tempPickingPix_ = new Uint8Array(4), _tempDepthColor_ = new Uint8Array(4);
43
42
 
44
43
  const DEPTH_DISTANCE = 11;//m
45
44
 
@@ -53,11 +52,10 @@ const MAX_NODES = 200;
53
52
 
54
53
  const HORIZON_TANGENT = 0.81;
55
54
 
56
- const EVENT_NAMES = [
57
- /**
58
- * Triggered before globe frame begins to render.
59
- * @event og.scene.Planet#draw
60
- */
55
+ const EVENT_NAMES = [/**
56
+ * Triggered before globe frame begins to render.
57
+ * @event og.scene.Planet#draw
58
+ */
61
59
  "draw",
62
60
 
63
61
  /**
@@ -100,8 +98,7 @@ const EVENT_NAMES = [
100
98
  * Triggered when layer data is laded
101
99
  * @event og.scene.Planet#terraincompleted
102
100
  */
103
- "layerloadend"
104
- ];
101
+ "layerloadend"];
105
102
 
106
103
  /**
107
104
  * Main class for rendering planet
@@ -124,12 +121,7 @@ export class Planet extends RenderNode {
124
121
  constructor(options = {}) {
125
122
  super(options.name);
126
123
 
127
- this._cameraFrustums = options.frustums || [
128
- [1, 100 + 0.075],
129
- [100, 1000 + 0.075],
130
- [1000, 1e6 + 10000],
131
- [1e6, 1e9]
132
- ];
124
+ this._cameraFrustums = options.frustums || [[1, 100 + 0.075], [100, 1000 + 0.075], [1000, 1e6 + 10000], [1e6, 1e9]];
133
125
 
134
126
  /**
135
127
  * @public
@@ -262,13 +254,6 @@ export class Planet extends RenderNode {
262
254
  this._renderedNodes = [];
263
255
  this._renderedNodesInFrustum = [];
264
256
 
265
- /**
266
- * Created nodes cache
267
- * @protected
268
- * @type {quadTree.Node}
269
- */
270
- this._quadTreeNodesCacheMerc = {};
271
-
272
257
  /**
273
258
  * Current visible mercator segments tree nodes array.
274
259
  * @protected
@@ -340,26 +325,7 @@ export class Planet extends RenderNode {
340
325
  */
341
326
  this._heightPickingFramebuffer = null;
342
327
 
343
- /**
344
- * Mercator grid tree.
345
- * @protected
346
- * @type {quadTree.Node}
347
- */
348
- this._quadTree = null;
349
-
350
- /**
351
- * North grid tree.
352
- * @protected
353
- * @type {quadTree.Node}
354
- */
355
- this._quadTreeNorth = null;
356
-
357
- /**
358
- * South grid tree.
359
- * @protected
360
- * @type {quadTree.Node}
361
- */
362
- this._quadTreeSouth = null;
328
+ this.quadTreeStrategy = options.quadTreeStrategyPrototype ? new options.quadTreeStrategyPrototype({ planet: this }) : new EarthQuadTreeStrategy({ planet: this });
363
329
 
364
330
  /**
365
331
  * Night glowing gl texture.
@@ -395,9 +361,7 @@ export class Planet extends RenderNode {
395
361
  * @protected
396
362
  * @type {boolean}
397
363
  */
398
- this._useSpecularTexture = isUndef(options.useSpecularTexture)
399
- ? true
400
- : options.useSpecularTexture;
364
+ this._useSpecularTexture = isUndef(options.useSpecularTexture) ? true : options.useSpecularTexture;
401
365
 
402
366
  this._maxGridSize = Math.log2(options.maxGridSize || 128);
403
367
 
@@ -439,7 +403,7 @@ export class Planet extends RenderNode {
439
403
 
440
404
  this._plainSegmentWorker = new PlainSegmentWorker(3);
441
405
 
442
- this._tileLoader = new Loader(options.loadingBatchSize || 12);
406
+ this._tileLoader = new Loader(options.maxLoadingRequests || 12);
443
407
 
444
408
  this._memKey = new Key();
445
409
 
@@ -466,6 +430,29 @@ export class Planet extends RenderNode {
466
430
  return Quat.getLookRotation(t, n);
467
431
  }
468
432
 
433
+ set diffuse(rgb) {
434
+ let vec = createColorRGB(rgb);
435
+ this._diffuse = new Float32Array(vec.toArray());
436
+ }
437
+
438
+ set ambient(rgb) {
439
+ let vec = createColorRGB(rgb);
440
+ this._ambient = new Float32Array(vec.toArray());
441
+ }
442
+
443
+ set specular(rgb) {
444
+ let vec = createColorRGB(rgb);
445
+ this._specular = new Float32Array([vec.x, vec.y, vec.y, this._specular[3]]);
446
+ }
447
+
448
+ set shininess(v) {
449
+ this._specular[3] = v;
450
+ }
451
+
452
+ get normalMapCreator() {
453
+ return this._normalMapCreator;
454
+ }
455
+
469
456
  get layers() {
470
457
  return [...this._layers];
471
458
  }
@@ -560,33 +547,7 @@ export class Planet extends RenderNode {
560
547
  * @param {Layer} layer - Material layer.
561
548
  */
562
549
  _clearLayerMaterial(layer) {
563
- var lid = layer._id;
564
- this._quadTree.traverseTree(function (node) {
565
- var mats = node.segment.materials;
566
- if (mats[lid]) {
567
- mats[lid].clear();
568
- mats[lid] = null;
569
- delete mats[lid];
570
- }
571
- });
572
-
573
- this._quadTreeNorth.traverseTree(function (node) {
574
- var mats = node.segment.materials;
575
- if (mats[lid]) {
576
- mats[lid].clear();
577
- mats[lid] = null;
578
- delete mats[lid];
579
- }
580
- });
581
-
582
- this._quadTreeSouth.traverseTree(function (node) {
583
- var mats = node.segment.materials;
584
- if (mats[lid]) {
585
- mats[lid].clear();
586
- mats[lid] = null;
587
- delete mats[lid];
588
- }
589
- });
550
+ this.quadTreeStrategy.clearLayerMaterial(layer);
590
551
  }
591
552
 
592
553
 
@@ -629,7 +590,7 @@ export class Planet extends RenderNode {
629
590
 
630
591
  if (this._heightFactor !== factor) {
631
592
  this._heightFactor = factor;
632
- this._quadTree.destroyBranches();
593
+ this.quadTreeStrategy.destroyBranches();
633
594
  }
634
595
  }
635
596
 
@@ -663,13 +624,7 @@ export class Planet extends RenderNode {
663
624
  this.terrain = terrain;
664
625
  this.terrain._planet = this;
665
626
 
666
- //this._normalMapCreator && this._normalMapCreator.setBlur(terrain.blur != undefined ? terrain.blur : true);
667
-
668
- if (this._quadTree) {
669
- this._quadTree.destroyBranches();
670
- }
671
-
672
- //if (terrain._geoid) {
627
+ this.quadTreeStrategy.destroyBranches();
673
628
 
674
629
  if (terrain._geoid.model) {
675
630
  this._plainSegmentWorker.setGeoid(terrain.getGeoid());
@@ -685,20 +640,6 @@ export class Planet extends RenderNode {
685
640
  console.log(err);
686
641
  });
687
642
  }
688
-
689
- // if (!terrain._geoid.model) {
690
- // Geoid.loadModel(terrain._geoid.src)
691
- // .then((m) => {
692
- // terrain.getGeoid().setModel(m);
693
- // this._plainSegmentWorker.setGeoid(terrain.getGeoid());
694
- // })
695
- // .catch((err) => {
696
- // console.log(err);
697
- // });
698
- // } else {
699
- // this._plainSegmentWorker.setGeoid(terrain.getGeoid());
700
- // }
701
- //}
702
643
  }
703
644
 
704
645
  /**
@@ -723,8 +664,7 @@ export class Planet extends RenderNode {
723
664
  this.renderer.addDepthCallback(this, this._renderDepthFramebufferPASS);
724
665
 
725
666
  this._heightPickingFramebuffer = new Framebuffer(this.renderer.handler, {
726
- width: 320,
727
- height: 240
667
+ width: 320, height: 240
728
668
  });
729
669
 
730
670
  this._heightPickingFramebuffer.init();
@@ -754,11 +694,9 @@ export class Planet extends RenderNode {
754
694
  for (var j = 0; j <= TABLESIZE; j++) {
755
695
  !this._indexesCache[i][j] && (this._indexesCache[i][j] = new Array(TABLESIZE));
756
696
  for (var k = 0; k <= TABLESIZE; k++) {
757
- !this._indexesCache[i][j][k] &&
758
- (this._indexesCache[i][j][k] = new Array(TABLESIZE));
697
+ !this._indexesCache[i][j][k] && (this._indexesCache[i][j][k] = new Array(TABLESIZE));
759
698
  for (var m = 0; m <= TABLESIZE; m++) {
760
- !this._indexesCache[i][j][k][m] &&
761
- (this._indexesCache[i][j][k][m] = new Array(TABLESIZE));
699
+ !this._indexesCache[i][j][k][m] && (this._indexesCache[i][j][k][m] = new Array(TABLESIZE));
762
700
  for (var q = 0; q <= TABLESIZE; q++) {
763
701
  let ptr = {
764
702
  buffer: null
@@ -768,10 +706,7 @@ export class Planet extends RenderNode {
768
706
  let indexes = segmentHelper
769
707
  .getInstance()
770
708
  .createSegmentIndexes(i, [j, k, m, q]);
771
- ptr.buffer = this.renderer.handler.createElementArrayBuffer(
772
- indexes,
773
- 1
774
- );
709
+ ptr.buffer = this.renderer.handler.createElementArrayBuffer(indexes, 1);
775
710
  indexes = null;
776
711
  } else {
777
712
  this._indexesCacheToRemove[kk++] = ptr;
@@ -795,11 +730,7 @@ export class Planet extends RenderNode {
795
730
  let texCoordCache = segmentHelper.getInstance().initTextureCoordsTable(TABLESIZE + 1);
796
731
 
797
732
  for (let i = 0; i <= TABLESIZE; i++) {
798
- this._textureCoordsBufferCache[i] = this.renderer.handler.createArrayBuffer(
799
- texCoordCache[i],
800
- 2,
801
- ((1 << i) + 1) * ((1 << i) + 1)
802
- );
733
+ this._textureCoordsBufferCache[i] = this.renderer.handler.createArrayBuffer(texCoordCache[i], 2, ((1 << i) + 1) * ((1 << i) + 1));
803
734
  }
804
735
 
805
736
  texCoordCache = null;
@@ -829,16 +760,9 @@ export class Planet extends RenderNode {
829
760
  this._renderedNodesInFrustum[i] = [];
830
761
  }
831
762
 
763
+
832
764
  // Creating quad trees nodes
833
- this._quadTree = new Node(Segment, this, quadTree.NW, null, 0, 0,
834
- Extent.createFromArray([-20037508.34, -20037508.34, 20037508.34, 20037508.34])
835
- );
836
- this._quadTreeNorth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0,
837
- Extent.createFromArray([-180, mercator.MAX_LAT, 180, 90])
838
- );
839
- this._quadTreeSouth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0,
840
- Extent.createFromArray([-180, -90, 180, mercator.MIN_LAT])
841
- );
765
+ this.quadTreeStrategy.init();
842
766
 
843
767
  this.drawMode = this.renderer.handler.gl.TRIANGLE_STRIP;
844
768
 
@@ -851,16 +775,12 @@ export class Planet extends RenderNode {
851
775
 
852
776
  // loading Earth night glowing texture
853
777
  if (this._useNightTexture) {
854
- createImageBitmap(NIGHT).then(
855
- (e) => (this._nightTexture = this.renderer.handler.createTextureDefault(e))
856
- );
778
+ createImageBitmap(NIGHT).then((e) => (this._nightTexture = this.renderer.handler.createTextureDefault(e)));
857
779
  }
858
780
 
859
781
  // load water specular mask
860
782
  if (this._useSpecularTexture) {
861
- createImageBitmap(SPECULAR).then(
862
- (e) => (this._specularTexture = this.renderer.handler.createTexture_l(e))
863
- );
783
+ createImageBitmap(SPECULAR).then((e) => (this._specularTexture = this.renderer.handler.createTexture_l(e)));
864
784
  }
865
785
 
866
786
  this._geoImageCreator = new GeoImageCreator(this);
@@ -887,8 +807,7 @@ export class Planet extends RenderNode {
887
807
 
888
808
  clearIndexesCache() {
889
809
  this._indexesCacheToRemoveCounter = 0;
890
- let c = this._indexesCacheToRemove,
891
- gl = this.renderer.handler.gl;
810
+ let c = this._indexesCacheToRemove, gl = this.renderer.handler.gl;
892
811
  for (let i = 0, len = c.length; i < len; i++) {
893
812
  let ci = c[i];
894
813
  gl.deleteBuffer(ci.buffer);
@@ -897,29 +816,7 @@ export class Planet extends RenderNode {
897
816
  }
898
817
 
899
818
  _preRender() {
900
- // Zoom 0
901
- this._quadTree.createChildrenNodes();
902
- this._quadTree.segment.createPlainSegment();
903
-
904
- // Zoom 1
905
- for (let i = 0; i < this._quadTree.nodes.length; i++) {
906
- this._quadTree.nodes[i].segment.createPlainSegment();
907
- }
908
-
909
- // same for poles
910
- this._quadTreeNorth.createChildrenNodes();
911
- this._quadTreeNorth.segment.createPlainSegment();
912
-
913
- for (let i = 0; i < this._quadTreeNorth.nodes.length; i++) {
914
- this._quadTreeNorth.nodes[i].segment.createPlainSegment();
915
- }
916
-
917
- this._quadTreeSouth.createChildrenNodes();
918
- this._quadTreeSouth.segment.createPlainSegment();
919
-
920
- for (let i = 0; i < this._quadTreeSouth.nodes.length; i++) {
921
- this._quadTreeSouth.nodes[i].segment.createPlainSegment();
922
- }
819
+ this.quadTreeStrategy.preRender();
923
820
 
924
821
  this._preLoad();
925
822
  }
@@ -929,38 +826,7 @@ export class Planet extends RenderNode {
929
826
 
930
827
  this._skipPreRender = false;
931
828
 
932
- // Same for poles
933
- this._quadTreeNorth.segment.passReady = true;
934
- this._quadTreeNorth.renderNode(true);
935
- this._normalMapCreator.drawSingle(this._quadTreeNorth.segment);
936
-
937
- for (let i = 0; i < this._quadTreeNorth.nodes.length; i++) {
938
- this._quadTreeNorth.nodes[i].segment.passReady = true;
939
- this._quadTreeNorth.nodes[i].renderNode(true);
940
- this._normalMapCreator.drawSingle(this._quadTreeNorth.nodes[i].segment);
941
- }
942
-
943
- this._quadTreeSouth.segment.passReady = true;
944
- this._quadTreeSouth.renderNode(true);
945
- this._normalMapCreator.drawSingle(this._quadTreeSouth.segment);
946
-
947
- for (let i = 0; i < this._quadTreeSouth.nodes.length; i++) {
948
- this._quadTreeSouth.nodes[i].segment.passReady = true;
949
- this._quadTreeSouth.nodes[i].renderNode(true);
950
- this._normalMapCreator.drawSingle(this._quadTreeSouth.nodes[i].segment);
951
- }
952
-
953
- // Zoom 1
954
- for (let i = 0; i < this._quadTree.nodes.length; i++) {
955
- this._quadTree.nodes[i].segment.passReady = true;
956
- this._quadTree.nodes[i].renderNode(true);
957
- this._normalMapCreator.drawSingle(this._quadTree.nodes[i].segment);
958
- }
959
-
960
- // Zoom 0
961
- this._quadTree.segment.passReady = true;
962
- this._quadTree.renderNode(true);
963
- this._normalMapCreator.drawSingle(this._quadTree.segment);
829
+ this.quadTreeStrategy.preLoad();
964
830
  }
965
831
 
966
832
  /**
@@ -1075,17 +941,13 @@ export class Planet extends RenderNode {
1075
941
  * @protected
1076
942
  */
1077
943
  _sortLayers() {
1078
- this.visibleVectorLayers.sort(
1079
- (a, b) => (a._zIndex - b._zIndex) || (a._height - b._height)
1080
- );
944
+ this.visibleVectorLayers.sort((a, b) => (a._zIndex - b._zIndex) || (a._height - b._height));
1081
945
 
1082
946
  this._visibleTileLayerSlices = [];
1083
947
  this._visibleTileLayerSlices.length = 0;
1084
948
 
1085
949
  if (this.visibleTileLayers.length) {
1086
- this.visibleTileLayers.sort((a, b) =>
1087
- (a._height - b._height) || (a._zIndex - b._zIndex)
1088
- );
950
+ this.visibleTileLayers.sort((a, b) => (a._height - b._height) || (a._zIndex - b._zIndex));
1089
951
 
1090
952
  var k = -1;
1091
953
  var currHeight = this.visibleTileLayers[0]._height;
@@ -1136,18 +998,11 @@ export class Planet extends RenderNode {
1136
998
  this.minCurrZoom = math.MAX;
1137
999
  this.maxCurrZoom = math.MIN;
1138
1000
 
1139
- this._quadTree.renderTree(cam, 0, null);
1140
-
1141
- if (cam.slope > this.minEqualZoomCameraSlope &&
1142
- cam._lonLat.height < this.maxEqualZoomAltitude &&
1143
- cam._lonLat.height > this.minEqualZoomAltitude
1144
- ) {
1001
+ if (cam.slope > this.minEqualZoomCameraSlope && cam._lonLat.height < this.maxEqualZoomAltitude && cam._lonLat.height > this.minEqualZoomAltitude) {
1145
1002
 
1146
1003
  this.minCurrZoom = this.maxCurrZoom;
1147
1004
 
1148
- let temp = this._renderedNodes,
1149
- rf = this._renderedNodesInFrustum,
1150
- temp2 = [];
1005
+ let temp = this._renderedNodes, rf = this._renderedNodesInFrustum, temp2 = [];
1151
1006
 
1152
1007
  this._renderedNodes = [];
1153
1008
 
@@ -1162,8 +1017,7 @@ export class Planet extends RenderNode {
1162
1017
  let ht = ri.segment.centerNormal.dot(cam._b);
1163
1018
  if (ri.segment.tileZoom === this.maxCurrZoom || ht < HORIZON_TANGENT) {
1164
1019
  this._renderedNodes.push(ri);
1165
- let k = 0,
1166
- inFrustum = ri.inFrustum;
1020
+ let k = 0, inFrustum = ri.inFrustum;
1167
1021
  while (inFrustum) {
1168
1022
  if (inFrustum & 1) {
1169
1023
  rf[k].push(ri);
@@ -1181,8 +1035,7 @@ export class Planet extends RenderNode {
1181
1035
  }
1182
1036
  }
1183
1037
 
1184
- this._quadTreeNorth.renderTree(cam, 0, null);
1185
- this._quadTreeSouth.renderTree(cam, 0, null);
1038
+ this.quadTreeStrategy.collectRenderNodes();
1186
1039
  }
1187
1040
 
1188
1041
  _globalPreDraw() {
@@ -1254,11 +1107,10 @@ export class Planet extends RenderNode {
1254
1107
  let h = renderer.handler;
1255
1108
  let gl = h.gl;
1256
1109
  let cam = renderer.activeCamera;
1257
- let frustumIndex = cam.getCurrentFrustum(),
1258
- firstPass = frustumIndex === cam.FARTHEST_FRUSTUM_INDEX;
1110
+ let frustumIndex = cam.getCurrentFrustum(), firstPass = frustumIndex === cam.FARTHEST_FRUSTUM_INDEX;
1259
1111
 
1260
1112
  if (firstPass) {
1261
- if (this._skipPreRender/* && (!this._renderCompletedActivated || cam.isMoved)*/) {
1113
+ if (this._skipPreRender) {
1262
1114
  this._collectRenderNodes();
1263
1115
  }
1264
1116
  this._skipPreRender = true;
@@ -1299,15 +1151,19 @@ export class Planet extends RenderNode {
1299
1151
  gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
1300
1152
  gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
1301
1153
 
1302
- gl.uniform3fv(shu.diffuse, this._diffuse);
1303
- gl.uniform3fv(shu.ambient, this._ambient);
1304
- gl.uniform4fv(shu.specular, this._specular);
1154
+ if (this.baseLayer) {
1155
+ gl.uniform3fv(shu.diffuse, this.baseLayer._diffuse || this._diffuse);
1156
+ gl.uniform3fv(shu.ambient, this.baseLayer._ambient || this._ambient);
1157
+ gl.uniform4fv(shu.specular, this.baseLayer._specular || this._specular);
1158
+ } else {
1159
+ gl.uniform3fv(shu.diffuse, this._diffuse);
1160
+ gl.uniform3fv(shu.ambient, this._ambient);
1161
+ gl.uniform4fv(shu.specular, this._specular);
1162
+ }
1305
1163
 
1306
1164
  // bind night glowing material
1307
1165
  gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
1308
- gl.bindTexture(gl.TEXTURE_2D,
1309
- (this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture
1310
- );
1166
+ gl.bindTexture(gl.TEXTURE_2D, (this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture);
1311
1167
  gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
1312
1168
 
1313
1169
  // bind specular material
@@ -1327,8 +1183,7 @@ export class Planet extends RenderNode {
1327
1183
  gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1328
1184
 
1329
1185
  // drawing planet nodes
1330
- var rn = this._renderedNodesInFrustum[frustumIndex],
1331
- sl = this._visibleTileLayerSlices;
1186
+ var rn = this._renderedNodesInFrustum[frustumIndex], sl = this._visibleTileLayerSlices;
1332
1187
 
1333
1188
  if (sl.length) {
1334
1189
  let sli = sl[0];
@@ -1403,8 +1258,7 @@ export class Planet extends RenderNode {
1403
1258
  gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1404
1259
 
1405
1260
  // drawing planet nodes
1406
- let rn = this._renderedNodesInFrustum[frustumIndex],
1407
- sl = this._visibleTileLayerSlices;
1261
+ let rn = this._renderedNodesInFrustum[frustumIndex], sl = this._visibleTileLayerSlices;
1408
1262
 
1409
1263
  let i = rn.length;
1410
1264
  while (i--) {
@@ -1440,8 +1294,7 @@ export class Planet extends RenderNode {
1440
1294
  gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1441
1295
 
1442
1296
  // drawing planet nodes
1443
- var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()],
1444
- sl = this._visibleTileLayerSlices;
1297
+ var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()], sl = this._visibleTileLayerSlices;
1445
1298
 
1446
1299
  let i = rn.length;
1447
1300
  while (i--) {
@@ -1486,8 +1339,7 @@ export class Planet extends RenderNode {
1486
1339
  gl.uniform3fv(shu.frustumPickingColor, cam.frustum._pickingColorU);
1487
1340
 
1488
1341
  // drawing planet nodes
1489
- var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()],
1490
- sl = this._visibleTileLayerSlices;
1342
+ var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()], sl = this._visibleTileLayerSlices;
1491
1343
 
1492
1344
  let i = rn.length;
1493
1345
  while (i--) {
@@ -1537,16 +1389,11 @@ export class Planet extends RenderNode {
1537
1389
  this.terrain.abortLoading();
1538
1390
  this._tileLoader.abortAll();
1539
1391
 
1540
- var that = this;
1541
- // setTimeout(function () {
1542
- that._quadTree.clearTree();
1543
- that._quadTreeNorth.clearTree();
1544
- that._quadTreeSouth.clearTree();
1545
1392
 
1546
- that.layerLock.free(that._memKey);
1547
- that.terrainLock.free(that._memKey);
1548
- that._normalMapCreator.free(that._memKey);
1549
- // }, 0);
1393
+ this.quadTreeStrategy.clear();
1394
+ this.layerLock.free(this._memKey);
1395
+ this.terrainLock.free(this._memKey);
1396
+ this._normalMapCreator.free(this._memKey);
1550
1397
 
1551
1398
  this._createdNodesCount = 0;
1552
1399
  }
@@ -1686,11 +1533,9 @@ export class Planet extends RenderNode {
1686
1533
  return this.getDistanceFromPixelEllipsoid(px) || 0;
1687
1534
  } else {
1688
1535
 
1689
- let r = this.renderer,
1690
- cnv = this.renderer.handler.canvas;
1536
+ let r = this.renderer, cnv = this.renderer.handler.canvas;
1691
1537
 
1692
- let spx = px.x / cnv.width,
1693
- spy = (cnv.height - px.y) / cnv.height;
1538
+ let spx = px.x / cnv.width, spy = (cnv.height - px.y) / cnv.height;
1694
1539
 
1695
1540
  _tempPickingPix_[0] = _tempPickingPix_[1] = _tempPickingPix_[2] = 0.0;
1696
1541
 
@@ -1710,12 +1555,7 @@ export class Planet extends RenderNode {
1710
1555
  r.screenDepthFramebuffer.activate();
1711
1556
  if (r.screenDepthFramebuffer.isComplete()) {
1712
1557
  r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
1713
- let screenPos = new Vec4(
1714
- spx * 2.0 - 1.0,
1715
- spy * 2.0 - 1.0,
1716
- (_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
1717
- 1.0 * 2.0 - 1.0
1718
- );
1558
+ let screenPos = new Vec4(spx * 2.0 - 1.0, spy * 2.0 - 1.0, (_tempDepthColor_[0] / 255.0) * 2.0 - 1.0, 1.0 * 2.0 - 1.0);
1719
1559
  let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
1720
1560
  let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1721
1561
  dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
@@ -1742,12 +1582,7 @@ export class Planet extends RenderNode {
1742
1582
  * where index 0 - southwest longitude, 1 - latitude southwest, 2 - longitude northeast, 3 - latitude northeast.
1743
1583
  */
1744
1584
  viewExtentArr(extentArr) {
1745
- this.renderer.activeCamera.viewExtent(
1746
- new Extent(
1747
- new LonLat(extentArr[0], extentArr[1]),
1748
- new LonLat(extentArr[2], extentArr[3])
1749
- )
1750
- );
1585
+ this.renderer.activeCamera.viewExtent(new Extent(new LonLat(extentArr[0], extentArr[1]), new LonLat(extentArr[2], extentArr[3])));
1751
1586
  }
1752
1587
 
1753
1588
  /**
@@ -1802,14 +1637,7 @@ export class Planet extends RenderNode {
1802
1637
  * @param {cameraCallback} [completeCallback] - Callback that calls befor the flying begins.
1803
1638
  */
1804
1639
  flyExtent(extent, height, up, ampl, completeCallback, startCallback) {
1805
- this.renderer.activeCamera.flyExtent(
1806
- extent,
1807
- height,
1808
- up,
1809
- ampl,
1810
- completeCallback,
1811
- startCallback
1812
- );
1640
+ this.renderer.activeCamera.flyExtent(extent, height, up, ampl, completeCallback, startCallback);
1813
1641
  }
1814
1642
 
1815
1643
  /**
@@ -1824,15 +1652,7 @@ export class Planet extends RenderNode {
1824
1652
  * @param [frameCallback]
1825
1653
  */
1826
1654
  flyCartesian(cartesian, look, up, ampl, completeCallback, startCallback, frameCallback) {
1827
- this.renderer.activeCamera.flyCartesian(
1828
- cartesian,
1829
- look,
1830
- up,
1831
- ampl,
1832
- completeCallback,
1833
- startCallback,
1834
- frameCallback
1835
- );
1655
+ this.renderer.activeCamera.flyCartesian(cartesian, look, up, ampl, completeCallback, startCallback, frameCallback);
1836
1656
  }
1837
1657
 
1838
1658
  /**
@@ -1847,15 +1667,7 @@ export class Planet extends RenderNode {
1847
1667
  * @param [frameCallback]
1848
1668
  */
1849
1669
  flyLonLat(lonlat, look, up, ampl, completeCallback, startCallback, frameCallback) {
1850
- this.renderer.activeCamera.flyLonLat(
1851
- lonlat,
1852
- look,
1853
- up,
1854
- ampl,
1855
- completeCallback,
1856
- startCallback,
1857
- frameCallback
1858
- );
1670
+ this.renderer.activeCamera.flyLonLat(lonlat, look, up, ampl, completeCallback, startCallback, frameCallback);
1859
1671
  }
1860
1672
 
1861
1673
  /**
@@ -1886,8 +1698,7 @@ export class Planet extends RenderNode {
1886
1698
  }
1887
1699
 
1888
1700
  getEntityTerrainPoint(entity, res) {
1889
- let n = this._renderedNodes,
1890
- i = n.length;
1701
+ let n = this._renderedNodes, i = n.length;
1891
1702
  while (i--) {
1892
1703
  if (n[i].segment.isEntityInside(entity)) {
1893
1704
  return n[i].segment.getEntityTerrainPoint(entity, res);