@openglobus/og 0.14.10 → 0.15.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.
Files changed (140) hide show
  1. package/css/og.css +378 -275
  2. package/dist/@openglobus/og.css +1 -1
  3. package/dist/@openglobus/og.esm.js +2 -2
  4. package/dist/@openglobus/og.esm.js.map +1 -1
  5. package/dist/@openglobus/og.umd.js +2 -2
  6. package/dist/@openglobus/og.umd.js.map +1 -1
  7. package/package.json +18 -17
  8. package/src/og/Clock.js +218 -194
  9. package/src/og/Globe.js +5 -5
  10. package/src/og/Object3d.js +104 -145
  11. package/src/og/camera/Camera.js +31 -27
  12. package/src/og/camera/PlanetCamera.js +22 -14
  13. package/src/og/cons.js +107 -107
  14. package/src/og/control/Atmosphere.js +396 -0
  15. package/src/og/control/CompassButton.js +11 -18
  16. package/src/og/control/Control.js +187 -188
  17. package/src/og/control/GeoImageDragControl.js +84 -66
  18. package/src/og/control/LayerSwitcher.js +56 -138
  19. package/src/og/control/Lighting.js +314 -186
  20. package/src/og/control/MouseNavigation.js +2 -2
  21. package/src/og/control/RulerSwitcher.js +24 -19
  22. package/src/og/control/ScaleControl.js +30 -10
  23. package/src/og/control/SimpleSkyBackground.js +210 -0
  24. package/src/og/control/Sun.js +2 -0
  25. package/src/og/control/ZoomControl.js +30 -42
  26. package/src/og/control/index.js +6 -0
  27. package/src/og/control/ruler/RulerScene.js +5 -23
  28. package/src/og/control/selection/Selection.js +99 -0
  29. package/src/og/control/selection/SelectionScene.js +350 -0
  30. package/src/og/control/timeline/TimelineControl.js +99 -0
  31. package/src/og/control/timeline/TimelineModel.js +133 -0
  32. package/src/og/control/timeline/TimelineView.js +449 -0
  33. package/src/og/control/timeline/timelineUtils.js +132 -0
  34. package/src/og/ellipsoid/Ellipsoid.js +120 -93
  35. package/src/og/ellipsoid/wgs84.js +13 -13
  36. package/src/og/entity/Entity.js +36 -9
  37. package/src/og/entity/EntityCollection.js +0 -2
  38. package/src/og/entity/GeoObject.js +72 -56
  39. package/src/og/entity/GeoObjectHandler.js +487 -656
  40. package/src/og/entity/GeometryHandler.js +1341 -1337
  41. package/src/og/entity/Polyline.js +0 -16
  42. package/src/og/entity/Ray.js +0 -10
  43. package/src/og/entity/RayHandler.js +3 -44
  44. package/src/og/entity/Strip.js +1 -6
  45. package/src/og/index.js +10 -6
  46. package/src/og/input/input.js +3 -1
  47. package/src/og/layer/CanvasTiles.js +39 -34
  48. package/src/og/layer/Layer.js +69 -9
  49. package/src/og/layer/Material.js +1 -8
  50. package/src/og/layer/WMS.js +16 -5
  51. package/src/og/light/LightSource.js +2 -0
  52. package/src/og/math/Line3.js +140 -139
  53. package/src/og/math/Plane.js +118 -117
  54. package/src/og/math/Ray.js +242 -239
  55. package/src/og/math/Vec3.js +56 -37
  56. package/src/og/math/Vec4.js +3 -4
  57. package/src/og/math.js +21 -21
  58. package/src/og/quadTree/Node.js +5 -4
  59. package/src/og/quadTree/index.js +12 -0
  60. package/src/og/renderer/Renderer.js +64 -37
  61. package/src/og/renderer/RendererEvents.js +1071 -1065
  62. package/src/og/scene/Planet.js +352 -172
  63. package/src/og/scene/RenderNode.js +27 -12
  64. package/src/og/segment/Segment.js +0 -5
  65. package/src/og/shaders/atmos.js +332 -0
  66. package/src/og/shaders/drawnode.js +475 -109
  67. package/src/og/shaders/geoObject.js +96 -51
  68. package/src/og/shaders/polyline.js +212 -17
  69. package/src/og/shaders/ray.js +13 -6
  70. package/src/og/shaders/toneMapping.js +5 -5
  71. package/src/og/shaders/utils.js +88 -0
  72. package/src/og/terrain/GlobusTerrain.js +5 -4
  73. package/src/og/terrain/MapboxTerrain.js +231 -52
  74. package/src/og/ui/Button.js +106 -0
  75. package/src/og/ui/ButtonGroup.js +57 -0
  76. package/src/og/ui/Dialog.js +242 -0
  77. package/src/og/ui/Slider.js +144 -0
  78. package/src/og/ui/ToggleButton.js +51 -0
  79. package/src/og/{control → ui}/UIhelpers.js +11 -2
  80. package/src/og/ui/View.js +190 -0
  81. package/src/og/utils/shared.js +960 -942
  82. package/src/og/webgl/Framebuffer.js +308 -387
  83. package/src/og/webgl/Handler.js +90 -30
  84. package/src/og/webgl/Multisample.js +8 -0
  85. package/types/Clock.d.ts +7 -2
  86. package/types/Object3d.d.ts +14 -3
  87. package/types/camera/Camera.d.ts +18 -17
  88. package/types/camera/PlanetCamera.d.ts +3 -1
  89. package/types/control/Atmosphere.d.ts +15 -0
  90. package/types/control/CompassButton.d.ts +1 -2
  91. package/types/control/GeoImageDragControl.d.ts +7 -1
  92. package/types/control/LayerSwitcher.d.ts +5 -6
  93. package/types/control/Lighting.d.ts +32 -7
  94. package/types/control/ScaleControl.d.ts +2 -1
  95. package/types/control/SimpleSkyBackground.d.ts +15 -0
  96. package/types/control/ZoomControl.d.ts +0 -1
  97. package/types/control/index.d.ts +4 -1
  98. package/types/control/ruler/RulerScene.d.ts +0 -1
  99. package/types/control/selection/Selection.d.ts +49 -0
  100. package/types/control/selection/SelectionScene.d.ts +34 -0
  101. package/types/ellipsoid/Ellipsoid.d.ts +3 -2
  102. package/types/entity/Entity.d.ts +8 -0
  103. package/types/entity/GeoObject.d.ts +28 -22
  104. package/types/entity/GeoObjectHandler.d.ts +16 -56
  105. package/types/entity/Ray.d.ts +0 -3
  106. package/types/entity/RayHandler.d.ts +0 -4
  107. package/types/index.d.ts +7 -5
  108. package/types/input/input.d.ts +2 -0
  109. package/types/layer/CanvasTiles.d.ts +1 -0
  110. package/types/layer/Layer.d.ts +9 -0
  111. package/types/layer/WMS.d.ts +7 -3
  112. package/types/math/Plane.d.ts +1 -1
  113. package/types/math/Vec3.d.ts +19 -16
  114. package/types/math/Vec4.d.ts +2 -3
  115. package/types/math.d.ts +20 -20
  116. package/types/quadTree/index.d.ts +10 -0
  117. package/types/renderer/Renderer.d.ts +11 -37
  118. package/types/scene/Planet.d.ts +27 -1
  119. package/types/scene/RenderNode.d.ts +2 -1
  120. package/types/segment/Segment.d.ts +1 -1
  121. package/types/shaders/atmos.d.ts +4 -0
  122. package/types/shaders/drawnode.d.ts +3 -2
  123. package/types/shaders/utils.d.ts +1 -0
  124. package/types/terrain/GlobusTerrain.d.ts +1 -1
  125. package/types/terrain/MapboxTerrain.d.ts +2 -1
  126. package/types/ui/Button.d.ts +21 -0
  127. package/types/ui/Dialog.d.ts +41 -0
  128. package/types/ui/Slider.d.ts +30 -0
  129. package/types/ui/ToggleButton.d.ts +10 -0
  130. package/types/{control → ui}/UIhelpers.d.ts +1 -1
  131. package/types/ui/View.d.ts +32 -0
  132. package/types/utils/shared.d.ts +16 -14
  133. package/types/webgl/Framebuffer.d.ts +2 -5
  134. package/types/webgl/Handler.d.ts +15 -10
  135. package/types/webgl/Multisample.d.ts +2 -0
  136. package/src/og/ajax.js +0 -204
  137. package/src/og/entity/Object3d.js +0 -504
  138. package/src/og/utils/quadTreeType.js +0 -11
  139. package/types/ajax.d.ts +0 -24
  140. package/types/utils/quadTreeType.d.ts +0 -8
@@ -30,16 +30,17 @@ import { VectorTileCreator } from "../utils/VectorTileCreator.js";
30
30
  import { wgs84 } from "../ellipsoid/wgs84.js";
31
31
  import { NIGHT, SPECULAR } from "../res/images.js";
32
32
  import { Geoid } from "../terrain/Geoid.js";
33
- import { isUndef } from "../utils/shared.js";
33
+ import { createColorRGB, isUndef } from "../utils/shared.js";
34
34
  import { MAX_RENDERED_NODES } from "../quadTree/quadTree.js";
35
35
  import { EarthQuadTreeStrategy } from "../quadTree/EarthQuadTreeStrategy.js";
36
+ import { SimpleSkyBackground } from "../control/SimpleSkyBackground.js";
37
+ import { Atmosphere } from "../control/Atmosphere.js";
36
38
 
37
39
  const CUR_LOD_SIZE = 250; //px
38
40
  const MIN_LOD_SIZE = 312; //px
39
41
  const MAX_LOD_SIZE = 190; //px
40
42
 
41
- let _tempPickingPix_ = new Uint8Array(4),
42
- _tempDepthColor_ = new Uint8Array(4);
43
+ let _tempPickingPix_ = new Uint8Array(4), _tempDepthColor_ = new Uint8Array(4);
43
44
 
44
45
  const DEPTH_DISTANCE = 11;//m
45
46
 
@@ -53,11 +54,10 @@ const MAX_NODES = 200;
53
54
 
54
55
  const HORIZON_TANGENT = 0.81;
55
56
 
56
- const EVENT_NAMES = [
57
- /**
58
- * Triggered before globe frame begins to render.
59
- * @event og.scene.Planet#draw
60
- */
57
+ const EVENT_NAMES = [/**
58
+ * Triggered before globe frame begins to render.
59
+ * @event og.scene.Planet#draw
60
+ */
61
61
  "draw",
62
62
 
63
63
  /**
@@ -100,8 +100,7 @@ const EVENT_NAMES = [
100
100
  * Triggered when layer data is laded
101
101
  * @event og.scene.Planet#terraincompleted
102
102
  */
103
- "layerloadend"
104
- ];
103
+ "layerloadend"];
105
104
 
106
105
  /**
107
106
  * Main class for rendering planet
@@ -124,12 +123,7 @@ export class Planet extends RenderNode {
124
123
  constructor(options = {}) {
125
124
  super(options.name);
126
125
 
127
- this._cameraFrustums = options.frustums || [
128
- [1, 100 + 0.075],
129
- [100, 1000 + 0.075],
130
- [1000, 1e6 + 10000],
131
- [1e6, 1e9]
132
- ];
126
+ this._cameraFrustums = options.frustums || [[1, 100 + 0.075], [100, 1000 + 0.075], [1000, 1e6 + 10000], [1e6, 1e9]];
133
127
 
134
128
  /**
135
129
  * @public
@@ -350,8 +344,8 @@ export class Planet extends RenderNode {
350
344
  //TODO: replace to a function
351
345
  let a = utils.createColorRGB(options.ambient, new Vec3(0.2, 0.2, 0.2));
352
346
  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;
347
+ let s = utils.createColorRGB(options.specular, new Vec3(0.013, 0.005, 0.0));
348
+ let shininess = options.shininess || 27.0;
355
349
 
356
350
  this._ambient = new Float32Array([a.x, a.y, a.z]);
357
351
  this._diffuse = new Float32Array([d.x, d.y, d.z]);
@@ -369,9 +363,7 @@ export class Planet extends RenderNode {
369
363
  * @protected
370
364
  * @type {boolean}
371
365
  */
372
- this._useSpecularTexture = isUndef(options.useSpecularTexture)
373
- ? true
374
- : options.useSpecularTexture;
366
+ this._useSpecularTexture = isUndef(options.useSpecularTexture) ? true : options.useSpecularTexture;
375
367
 
376
368
  this._maxGridSize = Math.log2(options.maxGridSize || 128);
377
369
 
@@ -432,14 +424,76 @@ export class Planet extends RenderNode {
432
424
 
433
425
  this._terrainCompleted = false;
434
426
  this._terrainCompletedActivated = false;
427
+ this._collectRenderNodesIsActive = true;
428
+
429
+ /**
430
+ * Night texture brightness coefficient
431
+ * @type {number}
432
+ */
433
+ this.nightTextureCoefficient = 1.5;
434
+
435
+ this._renderScreenNodesPASS = this._renderScreenNodesPASSNoAtmos;
436
+
437
+ this._atmosphereEnabled = options.atmosphereEnabled || false;
438
+ this._atmosphereMaxMinOpacity = new Float32Array([1.0, 0.41]);
435
439
  }
436
440
 
437
441
  static getBearingNorthRotationQuat(cartesian) {
442
+ //
443
+ // TODO: fix normal for ellipsoid
444
+ //
438
445
  let n = cartesian.normal();
439
446
  let t = Vec3.proj_b_to_plane(Vec3.UNIT_Y, n);
440
447
  return Quat.getLookRotation(t, n);
441
448
  }
442
449
 
450
+ set atmosphereMaxOpacity(opacity) {
451
+ this._atmosphereMaxMinOpacity[0] = opacity;
452
+ }
453
+
454
+ get atmosphereMaxOpacity() {
455
+ return this._atmosphereMaxMinOpacity[0];
456
+ }
457
+
458
+ set atmosphereMinOpacity(opacity) {
459
+ this._atmosphereMaxMinOpacity[1] = opacity;
460
+ }
461
+
462
+ get atmosphereMinOpacity() {
463
+ return this._atmosphereMaxMinOpacity[1];
464
+ }
465
+
466
+
467
+ set atmosphereEnabled(enabled) {
468
+ if (enabled != this._atmosphereEnabled) {
469
+ this._atmosphereEnabled = enabled;
470
+ this._initializeAtmosphere();
471
+ }
472
+ }
473
+
474
+ get atmosphereEnabled() {
475
+ return this._atmosphereEnabled;
476
+ }
477
+
478
+ set diffuse(rgb) {
479
+ let vec = createColorRGB(rgb);
480
+ this._diffuse = new Float32Array(vec.toArray());
481
+ }
482
+
483
+ set ambient(rgb) {
484
+ let vec = createColorRGB(rgb);
485
+ this._ambient = new Float32Array(vec.toArray());
486
+ }
487
+
488
+ set specular(rgb) {
489
+ let vec = createColorRGB(rgb);
490
+ this._specular = new Float32Array([vec.x, vec.y, vec.y, this._specular[3]]);
491
+ }
492
+
493
+ set shininess(v) {
494
+ this._specular[3] = v;
495
+ }
496
+
443
497
  get normalMapCreator() {
444
498
  return this._normalMapCreator;
445
499
  }
@@ -448,6 +502,10 @@ export class Planet extends RenderNode {
448
502
  return [...this._layers];
449
503
  }
450
504
 
505
+ get sunPos() {
506
+ return this.renderer.controls.sun.sunlight.getPosition();
507
+ }
508
+
451
509
  /**
452
510
  * Add the given control to the renderer of the planet scene.
453
511
  * @param {control.Control} control - Control.
@@ -628,24 +686,66 @@ export class Planet extends RenderNode {
628
686
  terrain._isReady = true;
629
687
  })
630
688
  .catch((err) => {
631
- console.log(err);
689
+ console.warn(err);
632
690
  });
633
691
  }
634
692
  }
635
693
 
694
+ _initializeAtmosphere() {
695
+ let h = this.renderer.handler;
696
+ h.removeProgram("drawnode_screen_wl");
697
+
698
+ if (this._atmosphereEnabled) {
699
+
700
+ this._renderScreenNodesPASS = this._renderScreenNodesPASSAtmos;
701
+
702
+ if (h.isWebGl2()) {
703
+ h.addProgram(shaders.drawnode_screen_wl_webgl2Atmos(), true);
704
+ } else {
705
+ h.addProgram(shaders.drawnode_screen_wl_webgl1NoAtmos(), true);
706
+ }
707
+
708
+ if (!this.renderer.controls.Atmosphere) {
709
+ this.addControl(new Atmosphere());
710
+ } else {
711
+ this.renderer.controls.Atmosphere.activate();
712
+ }
713
+
714
+ if (this.renderer.controls.SimpleSkyBackground) {
715
+ this.renderer.controls.SimpleSkyBackground.deactivate();
716
+ }
717
+
718
+ } else {
719
+
720
+ this._renderScreenNodesPASS = this._renderScreenNodesPASSNoAtmos;
721
+
722
+
723
+ if (this.renderer.controls.Atmosphere) {
724
+ this.renderer.controls.Atmosphere.deactivate();
725
+ }
726
+
727
+ if (!this.renderer.controls.SimpleSkyBackground) {
728
+ this.addControl(new SimpleSkyBackground());
729
+ } else {
730
+ this.renderer.controls.SimpleSkyBackground.activate();
731
+ }
732
+
733
+ if (h.isWebGl2()) {
734
+ h.addProgram(shaders.drawnode_screen_wl_webgl2NoAtmos(), true);
735
+ } else {
736
+ h.addProgram(shaders.drawnode_screen_wl_webgl1NoAtmos(), true);
737
+ }
738
+ }
739
+ }
740
+
636
741
  /**
637
742
  * @virtual
638
743
  * @protected
639
744
  */
640
745
  _initializeShaders() {
641
- var h = this.renderer.handler;
746
+ let h = this.renderer.handler;
642
747
 
643
748
  h.addProgram(shaders.drawnode_screen_nl(), true);
644
- if (h.isWebGl2()) {
645
- h.addProgram(shaders.drawnode_screen_wl_webgl2(), true);
646
- } else {
647
- h.addProgram(shaders.drawnode_screen_wl(), true);
648
- }
649
749
  h.addProgram(shaders.drawnode_colorPicking(), true);
650
750
  h.addProgram(shaders.drawnode_depth(), true);
651
751
  h.addProgram(shaders.drawnode_heightPicking(), true);
@@ -655,8 +755,7 @@ export class Planet extends RenderNode {
655
755
  this.renderer.addDepthCallback(this, this._renderDepthFramebufferPASS);
656
756
 
657
757
  this._heightPickingFramebuffer = new Framebuffer(this.renderer.handler, {
658
- width: 320,
659
- height: 240
758
+ width: 320, height: 240
660
759
  });
661
760
 
662
761
  this._heightPickingFramebuffer.init();
@@ -686,11 +785,9 @@ export class Planet extends RenderNode {
686
785
  for (var j = 0; j <= TABLESIZE; j++) {
687
786
  !this._indexesCache[i][j] && (this._indexesCache[i][j] = new Array(TABLESIZE));
688
787
  for (var k = 0; k <= TABLESIZE; k++) {
689
- !this._indexesCache[i][j][k] &&
690
- (this._indexesCache[i][j][k] = new Array(TABLESIZE));
788
+ !this._indexesCache[i][j][k] && (this._indexesCache[i][j][k] = new Array(TABLESIZE));
691
789
  for (var m = 0; m <= TABLESIZE; m++) {
692
- !this._indexesCache[i][j][k][m] &&
693
- (this._indexesCache[i][j][k][m] = new Array(TABLESIZE));
790
+ !this._indexesCache[i][j][k][m] && (this._indexesCache[i][j][k][m] = new Array(TABLESIZE));
694
791
  for (var q = 0; q <= TABLESIZE; q++) {
695
792
  let ptr = {
696
793
  buffer: null
@@ -700,10 +797,7 @@ export class Planet extends RenderNode {
700
797
  let indexes = segmentHelper
701
798
  .getInstance()
702
799
  .createSegmentIndexes(i, [j, k, m, q]);
703
- ptr.buffer = this.renderer.handler.createElementArrayBuffer(
704
- indexes,
705
- 1
706
- );
800
+ ptr.buffer = this.renderer.handler.createElementArrayBuffer(indexes, 1);
707
801
  indexes = null;
708
802
  } else {
709
803
  this._indexesCacheToRemove[kk++] = ptr;
@@ -727,11 +821,7 @@ export class Planet extends RenderNode {
727
821
  let texCoordCache = segmentHelper.getInstance().initTextureCoordsTable(TABLESIZE + 1);
728
822
 
729
823
  for (let i = 0; i <= TABLESIZE; i++) {
730
- this._textureCoordsBufferCache[i] = this.renderer.handler.createArrayBuffer(
731
- texCoordCache[i],
732
- 2,
733
- ((1 << i) + 1) * ((1 << i) + 1)
734
- );
824
+ this._textureCoordsBufferCache[i] = this.renderer.handler.createArrayBuffer(texCoordCache[i], 2, ((1 << i) + 1) * ((1 << i) + 1));
735
825
  }
736
826
 
737
827
  texCoordCache = null;
@@ -761,7 +851,6 @@ export class Planet extends RenderNode {
761
851
  this._renderedNodesInFrustum[i] = [];
762
852
  }
763
853
 
764
-
765
854
  // Creating quad trees nodes
766
855
  this.quadTreeStrategy.init();
767
856
 
@@ -770,22 +859,20 @@ export class Planet extends RenderNode {
770
859
  // Applying shaders
771
860
  this._initializeShaders();
772
861
 
862
+ this._initializeAtmosphere();
863
+
773
864
  this._updateVisibleLayers();
774
865
 
775
866
  this.renderer.addPickingCallback(this, this._frustumEntityCollectionPickingCallback);
776
867
 
777
868
  // loading Earth night glowing texture
778
869
  if (this._useNightTexture) {
779
- createImageBitmap(NIGHT).then(
780
- (e) => (this._nightTexture = this.renderer.handler.createTextureDefault(e))
781
- );
870
+ createImageBitmap(NIGHT).then((e) => (this._nightTexture = this.renderer.handler.createTextureDefault(e)));
782
871
  }
783
872
 
784
873
  // load water specular mask
785
874
  if (this._useSpecularTexture) {
786
- createImageBitmap(SPECULAR).then(
787
- (e) => (this._specularTexture = this.renderer.handler.createTexture_l(e))
788
- );
875
+ createImageBitmap(SPECULAR).then((e) => (this._specularTexture = this.renderer.handler.createTexture_l(e)));
789
876
  }
790
877
 
791
878
  this._geoImageCreator = new GeoImageCreator(this);
@@ -812,8 +899,7 @@ export class Planet extends RenderNode {
812
899
 
813
900
  clearIndexesCache() {
814
901
  this._indexesCacheToRemoveCounter = 0;
815
- let c = this._indexesCacheToRemove,
816
- gl = this.renderer.handler.gl;
902
+ let c = this._indexesCacheToRemove, gl = this.renderer.handler.gl;
817
903
  for (let i = 0, len = c.length; i < len; i++) {
818
904
  let ci = c[i];
819
905
  gl.deleteBuffer(ci.buffer);
@@ -947,17 +1033,13 @@ export class Planet extends RenderNode {
947
1033
  * @protected
948
1034
  */
949
1035
  _sortLayers() {
950
- this.visibleVectorLayers.sort(
951
- (a, b) => (a._zIndex - b._zIndex) || (a._height - b._height)
952
- );
1036
+ this.visibleVectorLayers.sort((a, b) => (a._zIndex - b._zIndex) || (a._height - b._height));
953
1037
 
954
1038
  this._visibleTileLayerSlices = [];
955
1039
  this._visibleTileLayerSlices.length = 0;
956
1040
 
957
1041
  if (this.visibleTileLayers.length) {
958
- this.visibleTileLayers.sort((a, b) =>
959
- (a._height - b._height) || (a._zIndex - b._zIndex)
960
- );
1042
+ this.visibleTileLayers.sort((a, b) => (a._height - b._height) || (a._zIndex - b._zIndex));
961
1043
 
962
1044
  var k = -1;
963
1045
  var currHeight = this.visibleTileLayers[0]._height;
@@ -976,8 +1058,9 @@ export class Planet extends RenderNode {
976
1058
  // clearing all node list
977
1059
  this._renderedNodes.length = 0;
978
1060
  this._renderedNodes = [];
1061
+ }
979
1062
 
980
- // clearing nodes in frustums
1063
+ _clearRenderNodesInFrustum() {
981
1064
  for (let i = 0, len = this._renderedNodesInFrustum.length; i < len; i++) {
982
1065
  this._renderedNodesInFrustum[i].length = 0;
983
1066
  this._renderedNodesInFrustum[i] = [];
@@ -990,13 +1073,12 @@ export class Planet extends RenderNode {
990
1073
  */
991
1074
  _collectRenderNodes() {
992
1075
  let cam = this.camera;
993
-
994
1076
  this._lodSize = math.lerp(cam.slope < 0.0 ? 0.0 : cam.slope, this._curLodSize, this._minLodSize);
995
-
996
1077
  cam._insideSegment = null;
997
1078
 
998
1079
  // clear first
999
1080
  this._clearRenderedNodeList();
1081
+ this._clearRenderNodesInFrustum();
1000
1082
 
1001
1083
  this._viewExtent.southWest.set(180, 180);
1002
1084
  this._viewExtent.northEast.set(-180, -180);
@@ -1008,32 +1090,23 @@ export class Planet extends RenderNode {
1008
1090
  this.minCurrZoom = math.MAX;
1009
1091
  this.maxCurrZoom = math.MIN;
1010
1092
 
1011
- if (cam.slope > this.minEqualZoomCameraSlope &&
1012
- cam._lonLat.height < this.maxEqualZoomAltitude &&
1013
- cam._lonLat.height > this.minEqualZoomAltitude
1014
- ) {
1093
+ this.quadTreeStrategy.collectRenderNodes();
1094
+
1095
+ if (cam.slope > this.minEqualZoomCameraSlope && cam._lonLat.height < this.maxEqualZoomAltitude && cam._lonLat.height > this.minEqualZoomAltitude) {
1015
1096
 
1016
1097
  this.minCurrZoom = this.maxCurrZoom;
1017
1098
 
1018
- let temp = this._renderedNodes,
1019
- rf = this._renderedNodesInFrustum,
1020
- temp2 = [];
1099
+ let temp = this._renderedNodes, rf = this._renderedNodesInFrustum, temp2 = [];
1021
1100
 
1101
+ this._clearRenderNodesInFrustum();
1022
1102
  this._renderedNodes = [];
1023
1103
 
1024
- // clearing nodes in frustums
1025
- for (let i = 0, len = this._renderedNodesInFrustum.length; i < len; i++) {
1026
- this._renderedNodesInFrustum[i].length = 0;
1027
- this._renderedNodesInFrustum[i] = [];
1028
- }
1029
-
1030
1104
  for (var i = 0, len = temp.length; i < len; i++) {
1031
1105
  var ri = temp[i];
1032
1106
  let ht = ri.segment.centerNormal.dot(cam._b);
1033
1107
  if (ri.segment.tileZoom === this.maxCurrZoom || ht < HORIZON_TANGENT) {
1034
1108
  this._renderedNodes.push(ri);
1035
- let k = 0,
1036
- inFrustum = ri.inFrustum;
1109
+ let k = 0, inFrustum = ri.inFrustum;
1037
1110
  while (inFrustum) {
1038
1111
  if (inFrustum & 1) {
1039
1112
  rf[k].push(ri);
@@ -1050,8 +1123,6 @@ export class Planet extends RenderNode {
1050
1123
  temp2[i].renderTree(cam, this.maxCurrZoom, null);
1051
1124
  }
1052
1125
  }
1053
-
1054
- this.quadTreeStrategy.collectRenderNodes();
1055
1126
  }
1056
1127
 
1057
1128
  _globalPreDraw() {
@@ -1083,6 +1154,10 @@ export class Planet extends RenderNode {
1083
1154
  this._updateVisibleLayers();
1084
1155
  }
1085
1156
 
1157
+ if (this.camera.isFirstPass) {
1158
+ this._firstPASS();
1159
+ }
1160
+
1086
1161
  this._renderScreenNodesPASS();
1087
1162
 
1088
1163
  this._renderHeightPickingFramebufferPASS();
@@ -1113,43 +1188,160 @@ export class Planet extends RenderNode {
1113
1188
  this._terrainCompleted = true;
1114
1189
  }
1115
1190
 
1116
- /**
1117
- * @protected
1118
- */
1119
- _renderScreenNodesPASS() {
1191
+ lockQuadTree() {
1192
+ this._collectRenderNodesIsActive = false;
1193
+ this.camera.setTerrainCollisionActivity(false);
1194
+ }
1195
+
1196
+ unlockQuadTree() {
1197
+ this._collectRenderNodesIsActive = true;
1198
+ this.camera.setTerrainCollisionActivity(true);
1199
+ }
1200
+
1201
+ _firstPASS() {
1202
+
1203
+ if (this._skipPreRender && this._collectRenderNodesIsActive) {
1204
+ this._collectRenderNodes();
1205
+ }
1206
+ this._skipPreRender = true;
1207
+
1208
+ // Here is the planet node dispatches a draw event before
1209
+ // rendering begins and we have got render nodes.
1210
+ this.events.dispatch(this.events.draw, this);
1211
+
1212
+ this.transformLights();
1213
+
1214
+ this._normalMapCreator.frame();
1215
+
1216
+ // Creating geoImages textures.
1217
+ this._geoImageCreator.frame();
1218
+
1219
+ // Collect entity collections from vector layers
1220
+ this._collectVectorLayerCollections();
1221
+
1222
+ // Vector tiles rasteriazation
1223
+ this._vectorTileCreator.frame();
1224
+ }
1225
+
1226
+ _renderScreenNodesPASSNoAtmos() {
1120
1227
 
1121
1228
  let sh, shu;
1122
1229
  let renderer = this.renderer;
1123
1230
  let h = renderer.handler;
1124
1231
  let gl = h.gl;
1125
1232
  let cam = renderer.activeCamera;
1126
- let frustumIndex = cam.getCurrentFrustum(),
1127
- firstPass = frustumIndex === cam.FARTHEST_FRUSTUM_INDEX;
1233
+ let firstPass = cam.isFirstPass;
1234
+ let frustumIndex = cam.currentFrustumIndex;
1128
1235
 
1129
- if (firstPass) {
1130
- if (this._skipPreRender/* && (!this._renderCompletedActivated || cam.isMoved)*/) {
1131
- this._collectRenderNodes();
1236
+ gl.enable(gl.CULL_FACE);
1237
+
1238
+ gl.enable(gl.BLEND);
1239
+ gl.blendEquation(gl.FUNC_ADD);
1240
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
1241
+
1242
+ if (this.lightEnabled) {
1243
+ h.programs.drawnode_screen_wl.activate();
1244
+ sh = h.programs.drawnode_screen_wl._program;
1245
+ shu = sh.uniforms;
1246
+
1247
+ gl.uniform3fv(shu.lightsPositions, this._lightsPositions);
1248
+ gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
1249
+ gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
1250
+
1251
+ if (this.baseLayer) {
1252
+ gl.uniform3fv(shu.diffuse, this.baseLayer._diffuse || this._diffuse);
1253
+ gl.uniform3fv(shu.ambient, this.baseLayer._ambient || this._ambient);
1254
+ gl.uniform4fv(shu.specular, this.baseLayer._specular || this._specular);
1255
+ gl.uniform1f(shu.nightTextureCoefficient, this.baseLayer.nightTextureCoefficient || this.nightTextureCoefficient);
1256
+ } else {
1257
+ gl.uniform3fv(shu.diffuse, this._diffuse);
1258
+ gl.uniform3fv(shu.ambient, this._ambient);
1259
+ gl.uniform4fv(shu.specular, this._specular);
1260
+ gl.uniform1f(shu.nightTextureCoefficient, this.nightTextureCoefficient);
1132
1261
  }
1133
- this._skipPreRender = true;
1134
1262
 
1135
- // Here is the planet node dispatches a draw event before
1136
- // rendering begins and we have got render nodes.
1137
- this.events.dispatch(this.events.draw, this);
1263
+ //
1264
+ // Night and specular
1265
+ //
1266
+ gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
1267
+ gl.bindTexture(gl.TEXTURE_2D, this._nightTexture || this.transparentTexture);
1268
+ gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
1269
+
1270
+ gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE + 1);
1271
+ gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
1272
+ gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
1273
+
1274
+ gl.uniform1f(shu.camHeight, cam.getHeight());
1275
+
1276
+ } else {
1277
+ h.programs.drawnode_screen_nl.activate();
1278
+ sh = h.programs.drawnode_screen_nl._program;
1279
+ shu = sh.uniforms;
1280
+ gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
1281
+ gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
1282
+ }
1283
+
1284
+ gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
1285
+ gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1138
1286
 
1139
- this.transformLights();
1287
+ //
1288
+ // drawing planet nodes
1289
+ //
1290
+ let rn = this._renderedNodesInFrustum[frustumIndex],
1291
+ sl = this._visibleTileLayerSlices;
1140
1292
 
1141
- this._normalMapCreator.frame();
1293
+ if (sl.length) {
1294
+ let sli = sl[0];
1295
+ for (var i = sli.length - 1; i >= 0; --i) {
1296
+ let li = sli[i];
1297
+ if (li._fading && firstPass && li._refreshFadingOpacity()) {
1298
+ sli.splice(i, 1);
1299
+ }
1300
+ }
1301
+ }
1142
1302
 
1143
- // Creating geoImages textures.
1144
- this._geoImageCreator.frame();
1303
+ let isEq = this.terrain.equalizeVertices;
1304
+ i = rn.length;
1305
+ while (i--) {
1306
+ let s = rn[i].segment;
1307
+ isEq && s.equalize();
1308
+ s.readyToEngage && s.engage();
1309
+ s.screenRendering(sh, sl[0], 0);
1310
+ }
1145
1311
 
1146
- // Collect entity collections from vector layers
1147
- this._collectVectorLayerCollections();
1312
+ gl.enable(gl.POLYGON_OFFSET_FILL);
1313
+ for (let j = 1, len = sl.length; j < len; j++) {
1314
+ let slj = sl[j];
1315
+ for (i = slj.length - 1; i >= 0; --i) {
1316
+ let li = slj[i];
1317
+ if (li._fading && firstPass && li._refreshFadingOpacity()) {
1318
+ slj.splice(i, 1);
1319
+ }
1320
+ }
1148
1321
 
1149
- // Vector tiles rasteriazation
1150
- this._vectorTileCreator.frame();
1322
+ gl.polygonOffset(0, -j);
1323
+ i = rn.length;
1324
+ while (i--) {
1325
+ rn[i].segment.screenRendering(sh, sl[j], j, this.transparentTexture, true);
1326
+ }
1151
1327
  }
1328
+ gl.disable(gl.POLYGON_OFFSET_FILL);
1329
+
1330
+ gl.disable(gl.BLEND);
1331
+ }
1332
+
1333
+ /**
1334
+ * @protected
1335
+ */
1336
+ _renderScreenNodesPASSAtmos() {
1152
1337
 
1338
+ let sh, shu;
1339
+ let renderer = this.renderer;
1340
+ let h = renderer.handler;
1341
+ let gl = h.gl;
1342
+ let cam = renderer.activeCamera;
1343
+ let firstPass = cam.isFirstPass;
1344
+ let frustumIndex = cam.currentFrustumIndex;
1153
1345
 
1154
1346
  gl.enable(gl.CULL_FACE);
1155
1347
 
@@ -1162,28 +1354,49 @@ export class Planet extends RenderNode {
1162
1354
  sh = h.programs.drawnode_screen_wl._program;
1163
1355
  shu = sh.uniforms;
1164
1356
 
1165
- gl.uniform4fv(shu.lightsPositions, this._lightsTransformedPositions);
1166
-
1167
- gl.uniformMatrix3fv(shu.normalMatrix, false, cam.getNormalMatrix());
1357
+ gl.uniform3fv(shu.lightsPositions, this._lightsPositions);
1168
1358
  gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
1169
1359
  gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
1170
1360
 
1171
- gl.uniform3fv(shu.diffuse, this._diffuse);
1172
- gl.uniform3fv(shu.ambient, this._ambient);
1173
- gl.uniform4fv(shu.specular, this._specular);
1361
+ if (this.baseLayer) {
1362
+ gl.uniform3fv(shu.diffuse, this.baseLayer._diffuse || this._diffuse);
1363
+ gl.uniform3fv(shu.ambient, this.baseLayer._ambient || this._ambient);
1364
+ gl.uniform4fv(shu.specular, this.baseLayer._specular || this._specular);
1365
+ gl.uniform1f(shu.nightTextureCoefficient, this.baseLayer.nightTextureCoefficient || this.nightTextureCoefficient);
1366
+ } else {
1367
+ gl.uniform3fv(shu.diffuse, this._diffuse);
1368
+ gl.uniform3fv(shu.ambient, this._ambient);
1369
+ gl.uniform4fv(shu.specular, this._specular);
1370
+ gl.uniform1f(shu.nightTextureCoefficient, this.nightTextureCoefficient);
1371
+ }
1372
+
1373
+ gl.uniform2fv(shu.maxMinOpacity, this._atmosphereMaxMinOpacity);
1174
1374
 
1175
- // bind night glowing material
1375
+ //
1376
+ // Night and specular
1377
+ //
1176
1378
  gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
1177
- gl.bindTexture(gl.TEXTURE_2D,
1178
- (this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture
1179
- );
1379
+ gl.bindTexture(gl.TEXTURE_2D, this._nightTexture || this.transparentTexture);
1180
1380
  gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
1181
1381
 
1182
- // bind specular material
1183
1382
  gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE + 1);
1184
1383
  gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
1185
1384
  gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
1186
1385
 
1386
+
1387
+ //
1388
+ // atmos precomputed textures
1389
+ //
1390
+ gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE + 4);
1391
+ gl.bindTexture(gl.TEXTURE_2D, this.renderer.controls.Atmosphere._transmittanceBuffer.textures[0]);
1392
+ gl.uniform1i(shu.transmittanceTexture, this.SLICE_SIZE + 4);
1393
+
1394
+ gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE + 5);
1395
+ gl.bindTexture(gl.TEXTURE_2D, this.renderer.controls.Atmosphere._scatteringBuffer.textures[0]);
1396
+ gl.uniform1i(shu.scatteringTexture, this.SLICE_SIZE + 5);
1397
+
1398
+ gl.uniform1f(shu.camHeight, cam.getHeight());
1399
+
1187
1400
  } else {
1188
1401
  h.programs.drawnode_screen_nl.activate();
1189
1402
  sh = h.programs.drawnode_screen_nl._program;
@@ -1195,8 +1408,10 @@ export class Planet extends RenderNode {
1195
1408
  gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
1196
1409
  gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1197
1410
 
1411
+ //
1198
1412
  // drawing planet nodes
1199
- var rn = this._renderedNodesInFrustum[frustumIndex],
1413
+ //
1414
+ let rn = this._renderedNodesInFrustum[frustumIndex],
1200
1415
  sl = this._visibleTileLayerSlices;
1201
1416
 
1202
1417
  if (sl.length) {
@@ -1252,7 +1467,7 @@ export class Planet extends RenderNode {
1252
1467
  let h = renderer.handler;
1253
1468
  let gl = h.gl;
1254
1469
  let cam = renderer.activeCamera;
1255
- let frustumIndex = cam.getCurrentFrustum();
1470
+ let frustumIndex = cam.currentFrustumIndex;
1256
1471
 
1257
1472
  if (frustumIndex === cam.FARTHEST_FRUSTUM_INDEX) {
1258
1473
  gl.clearColor(0.0, 0.0, 0.0, 1.0);
@@ -1272,8 +1487,7 @@ export class Planet extends RenderNode {
1272
1487
  gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1273
1488
 
1274
1489
  // drawing planet nodes
1275
- let rn = this._renderedNodesInFrustum[frustumIndex],
1276
- sl = this._visibleTileLayerSlices;
1490
+ let rn = this._renderedNodesInFrustum[frustumIndex], sl = this._visibleTileLayerSlices;
1277
1491
 
1278
1492
  let i = rn.length;
1279
1493
  while (i--) {
@@ -1309,8 +1523,7 @@ export class Planet extends RenderNode {
1309
1523
  gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1310
1524
 
1311
1525
  // drawing planet nodes
1312
- var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()],
1313
- sl = this._visibleTileLayerSlices;
1526
+ var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()], sl = this._visibleTileLayerSlices;
1314
1527
 
1315
1528
  let i = rn.length;
1316
1529
  while (i--) {
@@ -1355,8 +1568,7 @@ export class Planet extends RenderNode {
1355
1568
  gl.uniform3fv(shu.frustumPickingColor, cam.frustum._pickingColorU);
1356
1569
 
1357
1570
  // drawing planet nodes
1358
- var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()],
1359
- sl = this._visibleTileLayerSlices;
1571
+ var rn = this._renderedNodesInFrustum[cam.getCurrentFrustum()], sl = this._visibleTileLayerSlices;
1360
1572
 
1361
1573
  let i = rn.length;
1362
1574
  while (i--) {
@@ -1550,11 +1762,9 @@ export class Planet extends RenderNode {
1550
1762
  return this.getDistanceFromPixelEllipsoid(px) || 0;
1551
1763
  } else {
1552
1764
 
1553
- let r = this.renderer,
1554
- cnv = this.renderer.handler.canvas;
1765
+ let r = this.renderer, cnv = this.renderer.handler.canvas;
1555
1766
 
1556
- let spx = px.x / cnv.width,
1557
- spy = (cnv.height - px.y) / cnv.height;
1767
+ let spx = px.x / cnv.width, spy = (cnv.height - px.y) / cnv.height;
1558
1768
 
1559
1769
  _tempPickingPix_[0] = _tempPickingPix_[1] = _tempPickingPix_[2] = 0.0;
1560
1770
 
@@ -1562,28 +1772,27 @@ export class Planet extends RenderNode {
1562
1772
 
1563
1773
  // HEIGHT
1564
1774
  this._heightPickingFramebuffer.activate();
1565
- if (this._heightPickingFramebuffer.isComplete()) {
1566
- this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
1567
- dist = decodeFloatFromRGBAArr(_tempPickingPix_);
1568
- }
1775
+
1776
+ //if (this._heightPickingFramebuffer.isComplete()) {
1777
+ this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
1778
+ dist = decodeFloatFromRGBAArr(_tempPickingPix_);
1779
+ //}
1780
+
1569
1781
  this._heightPickingFramebuffer.deactivate();
1570
1782
 
1571
1783
  if (!(_tempPickingPix_[0] || _tempPickingPix_[1] || _tempPickingPix_[2])) {
1572
1784
  dist = this.getDistanceFromPixelEllipsoid(px) || 0;
1573
1785
  } else if (dist < DEPTH_DISTANCE) {
1574
1786
  r.screenDepthFramebuffer.activate();
1575
- if (r.screenDepthFramebuffer.isComplete()) {
1576
- r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
1577
- let screenPos = new Vec4(
1578
- spx * 2.0 - 1.0,
1579
- spy * 2.0 - 1.0,
1580
- (_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
1581
- 1.0 * 2.0 - 1.0
1582
- );
1583
- let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
1584
- let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1585
- dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
1586
- }
1787
+
1788
+ //if (r.screenDepthFramebuffer.isComplete()) {
1789
+ r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
1790
+ 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);
1791
+ let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
1792
+ let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1793
+ dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
1794
+ //}
1795
+
1587
1796
  r.screenDepthFramebuffer.deactivate();
1588
1797
  }
1589
1798
  return dist;
@@ -1606,12 +1815,7 @@ export class Planet extends RenderNode {
1606
1815
  * where index 0 - southwest longitude, 1 - latitude southwest, 2 - longitude northeast, 3 - latitude northeast.
1607
1816
  */
1608
1817
  viewExtentArr(extentArr) {
1609
- this.renderer.activeCamera.viewExtent(
1610
- new Extent(
1611
- new LonLat(extentArr[0], extentArr[1]),
1612
- new LonLat(extentArr[2], extentArr[3])
1613
- )
1614
- );
1818
+ this.renderer.activeCamera.viewExtent(new Extent(new LonLat(extentArr[0], extentArr[1]), new LonLat(extentArr[2], extentArr[3])));
1615
1819
  }
1616
1820
 
1617
1821
  /**
@@ -1666,14 +1870,7 @@ export class Planet extends RenderNode {
1666
1870
  * @param {cameraCallback} [completeCallback] - Callback that calls befor the flying begins.
1667
1871
  */
1668
1872
  flyExtent(extent, height, up, ampl, completeCallback, startCallback) {
1669
- this.renderer.activeCamera.flyExtent(
1670
- extent,
1671
- height,
1672
- up,
1673
- ampl,
1674
- completeCallback,
1675
- startCallback
1676
- );
1873
+ this.renderer.activeCamera.flyExtent(extent, height, up, ampl, completeCallback, startCallback);
1677
1874
  }
1678
1875
 
1679
1876
  /**
@@ -1688,15 +1885,7 @@ export class Planet extends RenderNode {
1688
1885
  * @param [frameCallback]
1689
1886
  */
1690
1887
  flyCartesian(cartesian, look, up, ampl, completeCallback, startCallback, frameCallback) {
1691
- this.renderer.activeCamera.flyCartesian(
1692
- cartesian,
1693
- look,
1694
- up,
1695
- ampl,
1696
- completeCallback,
1697
- startCallback,
1698
- frameCallback
1699
- );
1888
+ this.renderer.activeCamera.flyCartesian(cartesian, look, up, ampl, completeCallback, startCallback, frameCallback);
1700
1889
  }
1701
1890
 
1702
1891
  /**
@@ -1711,15 +1900,7 @@ export class Planet extends RenderNode {
1711
1900
  * @param [frameCallback]
1712
1901
  */
1713
1902
  flyLonLat(lonlat, look, up, ampl, completeCallback, startCallback, frameCallback) {
1714
- this.renderer.activeCamera.flyLonLat(
1715
- lonlat,
1716
- look,
1717
- up,
1718
- ampl,
1719
- completeCallback,
1720
- startCallback,
1721
- frameCallback
1722
- );
1903
+ this.renderer.activeCamera.flyLonLat(lonlat, look, up, ampl, completeCallback, startCallback, frameCallback);
1723
1904
  }
1724
1905
 
1725
1906
  /**
@@ -1750,8 +1931,7 @@ export class Planet extends RenderNode {
1750
1931
  }
1751
1932
 
1752
1933
  getEntityTerrainPoint(entity, res) {
1753
- let n = this._renderedNodes,
1754
- i = n.length;
1934
+ let n = this._renderedNodes, i = n.length;
1755
1935
  while (i--) {
1756
1936
  if (n[i].segment.isEntityInside(entity)) {
1757
1937
  return n[i].segment.getEntityTerrainPoint(entity, res);