@openglobus/og 0.11.8 → 0.12.4

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 (197) hide show
  1. package/css/og.css +2 -0
  2. package/dist/@openglobus/og.css +1 -0
  3. package/dist/@openglobus/og.esm.js +21 -0
  4. package/dist/@openglobus/og.esm.js.map +1 -0
  5. package/dist/@openglobus/og.umd.js +21 -0
  6. package/dist/@openglobus/og.umd.js.map +1 -0
  7. package/package.json +11 -11
  8. package/src/og/Globe.js +18 -6
  9. package/src/og/camera/Camera.js +70 -79
  10. package/src/og/camera/PlanetCamera.js +25 -30
  11. package/src/og/control/DebugInfo.js +2 -2
  12. package/src/og/control/EarthNavigation.js +26 -17
  13. package/src/og/control/MouseNavigation.js +11 -13
  14. package/src/og/control/MouseWheelZoomControl.js +5 -5
  15. package/src/og/control/Sun.js +3 -3
  16. package/src/og/entity/Entity.js +742 -742
  17. package/src/og/entity/GeoObjectHandler.js +138 -134
  18. package/src/og/entity/LabelHandler.js +2 -1
  19. package/src/og/layer/CanvasTiles.js +8 -11
  20. package/src/og/layer/KML.js +19 -12
  21. package/src/og/layer/Layer.js +9 -2
  22. package/src/og/layer/XYZ.js +27 -28
  23. package/src/og/math/Vec3.js +18 -2
  24. package/src/og/quadTree/Node.js +48 -93
  25. package/src/og/quadTree/quadTree.js +1 -1
  26. package/src/og/renderer/Renderer.js +3 -5
  27. package/src/og/scene/Planet.js +147 -127
  28. package/src/og/segment/Segment.js +63 -136
  29. package/src/og/shaders/drawnode.js +132 -221
  30. package/src/og/shaders/geoObject.js +15 -6
  31. package/src/og/terrain/EmptyTerrain.js +3 -2
  32. package/src/og/terrain/GlobusTerrain.js +2 -0
  33. package/src/og/utils/Loader.js +1 -1
  34. package/src/og/utils/PlainSegmentWorker.js +0 -13
  35. package/src/og/webgl/Handler.js +13 -9
  36. package/types/Clock.d.ts +94 -0
  37. package/types/Deferred.d.ts +6 -0
  38. package/types/Events.d.ts +77 -0
  39. package/types/Extent.d.ts +166 -0
  40. package/types/Globe.d.ts +85 -0
  41. package/types/ImageCanvas.d.ts +123 -0
  42. package/types/Lock.d.ts +12 -0
  43. package/types/LonLat.d.ts +108 -0
  44. package/types/Popup.d.ts +42 -0
  45. package/types/QueueArray.d.ts +19 -0
  46. package/types/Rectangle.d.ts +80 -0
  47. package/types/Stack.d.ts +19 -0
  48. package/types/ajax.d.ts +24 -0
  49. package/types/arial.d.ts +48 -0
  50. package/types/astro/astro.d.ts +38 -0
  51. package/types/astro/earth.d.ts +7 -0
  52. package/types/astro/jd.d.ts +254 -0
  53. package/types/bv/Box.d.ts +30 -0
  54. package/types/bv/Sphere.d.ts +38 -0
  55. package/types/bv/index.d.ts +3 -0
  56. package/types/camera/Camera.d.ts +312 -0
  57. package/types/camera/Frustum.d.ts +133 -0
  58. package/types/camera/PlanetCamera.d.ts +219 -0
  59. package/types/camera/index.d.ts +3 -0
  60. package/types/cons.d.ts +40 -0
  61. package/types/control/CompassButton.d.ts +17 -0
  62. package/types/control/Control.d.ts +104 -0
  63. package/types/control/DebugInfo.d.ts +15 -0
  64. package/types/control/EarthCoordinates.d.ts +47 -0
  65. package/types/control/EarthNavigation.d.ts +43 -0
  66. package/types/control/GeoImageDragControl.d.ts +6 -0
  67. package/types/control/KeyboardNavigation.d.ts +21 -0
  68. package/types/control/LayerSwitcher.d.ts +21 -0
  69. package/types/control/Lighting.d.ts +16 -0
  70. package/types/control/MouseNavigation.d.ts +48 -0
  71. package/types/control/MouseWheelZoomControl.d.ts +45 -0
  72. package/types/control/ScaleControl.d.ts +22 -0
  73. package/types/control/ShowFps.d.ts +11 -0
  74. package/types/control/SimpleNavigation.d.ts +25 -0
  75. package/types/control/Sun.d.ts +50 -0
  76. package/types/control/ToggleWireframe.d.ts +12 -0
  77. package/types/control/TouchNavigation.d.ts +48 -0
  78. package/types/control/ZoomControl.d.ts +27 -0
  79. package/types/control/index.d.ts +18 -0
  80. package/types/ellipsoid/Ellipsoid.d.ts +146 -0
  81. package/types/ellipsoid/index.d.ts +3 -0
  82. package/types/ellipsoid/wgs84.d.ts +6 -0
  83. package/types/entity/BaseBillboard.d.ts +215 -0
  84. package/types/entity/Billboard.d.ts +94 -0
  85. package/types/entity/BillboardHandler.d.ts +79 -0
  86. package/types/entity/Entity.d.ts +348 -0
  87. package/types/entity/EntityCollection.d.ts +317 -0
  88. package/types/entity/GeoObject.d.ts +111 -0
  89. package/types/entity/GeoObjectHandler.d.ts +81 -0
  90. package/types/entity/Geometry.d.ts +74 -0
  91. package/types/entity/GeometryHandler.d.ts +76 -0
  92. package/types/entity/Label.d.ts +189 -0
  93. package/types/entity/LabelHandler.d.ts +31 -0
  94. package/types/entity/LabelWorker.d.ts +11 -0
  95. package/types/entity/PointCloud.d.ts +174 -0
  96. package/types/entity/PointCloudHandler.d.ts +38 -0
  97. package/types/entity/Polyline.d.ts +306 -0
  98. package/types/entity/PolylineHandler.d.ts +18 -0
  99. package/types/entity/Ray.d.ts +124 -0
  100. package/types/entity/RayHandler.d.ts +67 -0
  101. package/types/entity/ShapeHandler.d.ts +22 -0
  102. package/types/entity/Strip.d.ts +119 -0
  103. package/types/entity/StripHandler.d.ts +38 -0
  104. package/types/entity/index.d.ts +8 -0
  105. package/types/index.core.d.ts +65 -0
  106. package/types/index.d.ts +45 -0
  107. package/types/index.webgl.d.ts +7 -0
  108. package/types/input/KeyboardHandler.d.ts +10 -0
  109. package/types/input/MouseHandler.d.ts +5 -0
  110. package/types/input/TouchHandler.d.ts +5 -0
  111. package/types/input/input.d.ts +34 -0
  112. package/types/layer/BaseGeoImage.d.ts +94 -0
  113. package/types/layer/CanvasTiles.d.ts +67 -0
  114. package/types/layer/GeoImage.d.ts +52 -0
  115. package/types/layer/GeoTexture2d.d.ts +8 -0
  116. package/types/layer/GeoVideo.d.ts +55 -0
  117. package/types/layer/KML.d.ts +68 -0
  118. package/types/layer/Layer.d.ts +311 -0
  119. package/types/layer/Material.d.ts +45 -0
  120. package/types/layer/Vector.d.ts +208 -0
  121. package/types/layer/WMS.d.ts +61 -0
  122. package/types/layer/XYZ.d.ts +119 -0
  123. package/types/layer/index.d.ts +10 -0
  124. package/types/light/LightSource.d.ts +178 -0
  125. package/types/math/Line2.d.ts +11 -0
  126. package/types/math/Line3.d.ts +10 -0
  127. package/types/math/Mat3.d.ts +65 -0
  128. package/types/math/Mat4.d.ts +176 -0
  129. package/types/math/Plane.d.ts +18 -0
  130. package/types/math/Quat.d.ts +379 -0
  131. package/types/math/Ray.d.ts +82 -0
  132. package/types/math/Vec2.d.ts +309 -0
  133. package/types/math/Vec3.d.ts +467 -0
  134. package/types/math/Vec4.d.ts +162 -0
  135. package/types/math/coder.d.ts +43 -0
  136. package/types/math/index.d.ts +11 -0
  137. package/types/math.d.ts +261 -0
  138. package/types/mercator.d.ts +92 -0
  139. package/types/proj/EPSG3857.d.ts +6 -0
  140. package/types/proj/EPSG4326.d.ts +6 -0
  141. package/types/proj/Proj.d.ts +42 -0
  142. package/types/quadTree/EntityCollectionNode.d.ts +34 -0
  143. package/types/quadTree/Node.d.ts +60 -0
  144. package/types/quadTree/quadTree.d.ts +40 -0
  145. package/types/renderer/Renderer.d.ts +290 -0
  146. package/types/renderer/RendererEvents.d.ts +237 -0
  147. package/types/res/images.d.ts +3 -0
  148. package/types/scene/Axes.d.ts +11 -0
  149. package/types/scene/BaseNode.d.ts +60 -0
  150. package/types/scene/Planet.d.ts +576 -0
  151. package/types/scene/RenderNode.d.ts +142 -0
  152. package/types/scene/SkyBox.d.ts +10 -0
  153. package/types/scene/index.d.ts +4 -0
  154. package/types/segment/Segment.d.ts +275 -0
  155. package/types/segment/SegmentLonLat.d.ts +17 -0
  156. package/types/segment/Slice.d.ts +10 -0
  157. package/types/segment/segmentHelper.d.ts +13 -0
  158. package/types/shaders/billboard.d.ts +3 -0
  159. package/types/shaders/depth.d.ts +2 -0
  160. package/types/shaders/drawnode.d.ts +7 -0
  161. package/types/shaders/geoObject.d.ts +3 -0
  162. package/types/shaders/label.d.ts +4 -0
  163. package/types/shaders/pointCloud.d.ts +2 -0
  164. package/types/shaders/polyline.d.ts +3 -0
  165. package/types/shaders/ray.d.ts +2 -0
  166. package/types/shaders/screenFrame.d.ts +2 -0
  167. package/types/shaders/shape.d.ts +4 -0
  168. package/types/shaders/skybox.d.ts +2 -0
  169. package/types/shaders/toneMapping.d.ts +2 -0
  170. package/types/shapes/BaseShape.d.ts +250 -0
  171. package/types/shapes/Sphere.d.ts +41 -0
  172. package/types/terrain/BilTerrain.d.ts +7 -0
  173. package/types/terrain/EmptyTerrain.d.ts +73 -0
  174. package/types/terrain/Geoid.d.ts +26 -0
  175. package/types/terrain/GlobusTerrain.d.ts +116 -0
  176. package/types/terrain/MapboxTerrain.d.ts +7 -0
  177. package/types/terrain/index.d.ts +5 -0
  178. package/types/utils/FontAtlas.d.ts +15 -0
  179. package/types/utils/GeoImageCreator.d.ts +30 -0
  180. package/types/utils/ImagesCacheManager.d.ts +10 -0
  181. package/types/utils/Loader.d.ts +25 -0
  182. package/types/utils/NormalMapCreator.d.ts +39 -0
  183. package/types/utils/PlainSegmentWorker.d.ts +10 -0
  184. package/types/utils/TerrainWorker.d.ts +9 -0
  185. package/types/utils/TextureAtlas.d.ts +111 -0
  186. package/types/utils/VectorTileCreator.d.ts +16 -0
  187. package/types/utils/colorTable.d.ts +143 -0
  188. package/types/utils/earcut.d.ts +6 -0
  189. package/types/utils/shared.d.ts +231 -0
  190. package/types/webgl/Framebuffer.d.ts +135 -0
  191. package/types/webgl/Handler.d.ts +417 -0
  192. package/types/webgl/Multisample.d.ts +89 -0
  193. package/types/webgl/Program.d.ts +161 -0
  194. package/types/webgl/ProgramController.d.ts +89 -0
  195. package/types/webgl/callbacks.d.ts +1 -0
  196. package/types/webgl/index.d.ts +6 -0
  197. package/types/webgl/types.d.ts +2 -0
@@ -32,14 +32,16 @@ import { wgs84 } from "../ellipsoid/wgs84.js";
32
32
  import { NIGHT, SPECULAR } from "../res/images.js";
33
33
  import { Geoid } from "../terrain/Geoid.js";
34
34
  import { isUndef } from "../utils/shared.js";
35
+ import { MAX_RENDERED_NODES } from "../quadTree/quadTree.js";
35
36
 
36
- const MAX_LOD = 1.0;
37
- const MIN_LOD = 0.75;
37
+ const CUR_LOD_SIZE = 250; //px
38
+ const MIN_LOD_SIZE = 312; //px
39
+ const MAX_LOD_SIZE = 190; //px
38
40
 
39
41
  let _tempPickingPix_ = new Uint8Array(4),
40
42
  _tempDepthColor_ = new Uint8Array(4);
41
43
 
42
- const DEPTH_DISTANCE = 11;
44
+ const DEPTH_DISTANCE = 11;//m
43
45
 
44
46
  /**
45
47
  * Maximum created nodes count. The more nodes count the more memory usage.
@@ -49,6 +51,8 @@ const DEPTH_DISTANCE = 11;
49
51
  */
50
52
  const MAX_NODES = 200;
51
53
 
54
+ const HORIZON_TANGENT = 0.81;
55
+
52
56
  const EVENT_NAMES = [
53
57
  /**
54
58
  * Triggered before globe frame begins to render.
@@ -108,6 +112,13 @@ export class Planet extends RenderNode {
108
112
  constructor(options = {}) {
109
113
  super(options.name);
110
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
+
111
122
  /**
112
123
  * @public
113
124
  * @type {Ellipsoid}
@@ -378,9 +389,10 @@ export class Planet extends RenderNode {
378
389
  * @public
379
390
  * @type {number}
380
391
  */
381
- this._lodRatio = MAX_LOD;
382
- this._maxLodRatio = MAX_LOD;
383
- this._minLodRatio = MIN_LOD;
392
+ this._lodSize = CUR_LOD_SIZE;
393
+ this._curLodSize = CUR_LOD_SIZE;
394
+ this._minLodSize = MIN_LOD_SIZE;
395
+ this._maxLodSize = MAX_LOD_SIZE;
384
396
 
385
397
  this._pickingColorArr = new Float32Array(this.SLICE_SIZE_4);
386
398
  this._samplerArr = new Int32Array(this.SLICE_SIZE);
@@ -397,11 +409,11 @@ export class Planet extends RenderNode {
397
409
 
398
410
  this._normalMapCreator = null;
399
411
 
400
- this._terrainWorker = new TerrainWorker(2);
412
+ this._terrainWorker = new TerrainWorker(3);
401
413
 
402
- this._plainSegmentWorker = new PlainSegmentWorker(2);
414
+ this._plainSegmentWorker = new PlainSegmentWorker(4);
403
415
 
404
- this._tileLoader = new Loader(14);
416
+ this._tileLoader = new Loader(options.loadingBatchSize || 12);
405
417
 
406
418
  this._memKey = new Key();
407
419
 
@@ -433,11 +445,14 @@ export class Planet extends RenderNode {
433
445
  control.addTo(this.renderer);
434
446
  }
435
447
 
436
- setRatioLod(maxLod, minLod) {
437
- this._maxLodRatio = maxLod;
438
- if (minLod) {
439
- this._minLodRatio = minLod;
440
- }
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;
441
456
  this._renderCompletedActivated = false;
442
457
  }
443
458
 
@@ -717,6 +732,7 @@ export class Planet extends RenderNode {
717
732
  this.transparentTexture = this.renderer.handler.transparentTexture;
718
733
 
719
734
  this.camera = this.renderer.activeCamera = new PlanetCamera(this, {
735
+ frustums: this._cameraFrustums,
720
736
  eye: new Vec3(0, 0, 28000000),
721
737
  look: new Vec3(0, 0, 0),
722
738
  up: new Vec3(0, 1, 0),
@@ -799,38 +815,70 @@ export class Planet extends RenderNode {
799
815
  }
800
816
 
801
817
  _preRender() {
818
+ // Zoom 0
802
819
  this._quadTree.createChildrenNodes();
803
- this._quadTree.segment.createPlainSegment();
804
- this._quadTree.renderNode(true);
805
- this._normalMapCreator.drawSingle(this._quadTree.segment);
820
+ this._quadTree.segment.createPlainSegment();
806
821
 
822
+ // Zoom 1
807
823
  for (let i = 0; i < this._quadTree.nodes.length; i++) {
808
824
  this._quadTree.nodes[i].segment.createPlainSegment();
809
- this._quadTree.nodes[i].renderNode(true);
810
- this._normalMapCreator.drawSingle(this._quadTree.nodes[i].segment);
811
825
  }
812
826
 
827
+ // same for poles
813
828
  this._quadTreeNorth.createChildrenNodes();
814
829
  this._quadTreeNorth.segment.createPlainSegment();
830
+
831
+ for (let i = 0; i < this._quadTreeNorth.nodes.length; i++) {
832
+ this._quadTreeNorth.nodes[i].segment.createPlainSegment();
833
+ }
834
+
835
+ this._quadTreeSouth.createChildrenNodes();
836
+ this._quadTreeSouth.segment.createPlainSegment();
837
+
838
+ for (let i = 0; i < this._quadTreeSouth.nodes.length; i++) {
839
+ this._quadTreeSouth.nodes[i].segment.createPlainSegment();
840
+ }
841
+
842
+ this._preLoad();
843
+ }
844
+
845
+ _preLoad() {
846
+ this._clearRenderedNodeList();
847
+
848
+ this._skipPreRender = false;
849
+
850
+ // Same for poles
851
+ this._quadTreeNorth.segment.passReady = true;
815
852
  this._quadTreeNorth.renderNode(true);
816
853
  this._normalMapCreator.drawSingle(this._quadTreeNorth.segment);
817
854
 
818
855
  for (let i = 0; i < this._quadTreeNorth.nodes.length; i++) {
819
- this._quadTreeNorth.nodes[i].segment.createPlainSegment();
856
+ this._quadTreeNorth.nodes[i].segment.passReady = true;
820
857
  this._quadTreeNorth.nodes[i].renderNode(true);
821
858
  this._normalMapCreator.drawSingle(this._quadTreeNorth.nodes[i].segment);
822
859
  }
823
860
 
824
- this._quadTreeSouth.createChildrenNodes();
825
- this._quadTreeSouth.segment.createPlainSegment();
861
+ this._quadTreeSouth.segment.passReady = true;
826
862
  this._quadTreeSouth.renderNode(true);
827
863
  this._normalMapCreator.drawSingle(this._quadTreeSouth.segment);
828
864
 
829
865
  for (let i = 0; i < this._quadTreeSouth.nodes.length; i++) {
830
- this._quadTreeSouth.nodes[i].segment.createPlainSegment();
866
+ this._quadTreeSouth.nodes[i].segment.passReady = true;
831
867
  this._quadTreeSouth.nodes[i].renderNode(true);
832
868
  this._normalMapCreator.drawSingle(this._quadTreeSouth.nodes[i].segment);
833
869
  }
870
+
871
+ // Zoom 1
872
+ for (let i = 0; i < this._quadTree.nodes.length; i++) {
873
+ this._quadTree.nodes[i].segment.passReady = true;
874
+ this._quadTree.nodes[i].renderNode(true);
875
+ this._normalMapCreator.drawSingle(this._quadTree.nodes[i].segment);
876
+ }
877
+
878
+ // Zoom 0
879
+ this._quadTree.segment.passReady = true;
880
+ this._quadTree.renderNode(true);
881
+ this._normalMapCreator.drawSingle(this._quadTree.segment);
834
882
  }
835
883
 
836
884
  /**
@@ -908,6 +956,7 @@ export class Planet extends RenderNode {
908
956
  if (li._attribution.length) {
909
957
  html += "<li>" + li._attribution + "</li>";
910
958
  }
959
+
911
960
  } else if (li._fading && li._fadingOpacity > 0) {
912
961
  if (li.hasImageryTiles()) {
913
962
  this.visibleTileLayers.push(li);
@@ -981,16 +1030,10 @@ export class Planet extends RenderNode {
981
1030
  _collectRenderNodes() {
982
1031
  let cam = this.camera;
983
1032
 
984
- this._lodRatio = math.lerp(
985
- cam.slope < 0.0 ? 0.0 : cam.slope,
986
- this._maxLodRatio,
987
- this._minLodRatio
988
- );
1033
+ this._lodSize = math.lerp(cam.slope < 0.0 ? 0.0 : cam.slope, this._curLodSize, this._minLodSize);
989
1034
 
990
1035
  cam._insideSegment = null;
991
1036
 
992
- this._nodeCounterError_ = 0;
993
-
994
1037
  // clear first
995
1038
  this._clearRenderedNodeList();
996
1039
 
@@ -1005,11 +1048,11 @@ export class Planet extends RenderNode {
1005
1048
 
1006
1049
  this._quadTree.renderTree(cam, 0, null);
1007
1050
 
1008
- if (
1009
- cam.slope > this.minEqualZoomCameraSlope &&
1051
+ if (cam.slope > this.minEqualZoomCameraSlope &&
1010
1052
  cam._lonLat.height < this.maxEqualZoomAltitude &&
1011
1053
  cam._lonLat.height > this.minEqualZoomAltitude
1012
1054
  ) {
1055
+
1013
1056
  this.minCurrZoom = this.maxCurrZoom;
1014
1057
 
1015
1058
  let temp = this._renderedNodes,
@@ -1026,7 +1069,8 @@ export class Planet extends RenderNode {
1026
1069
 
1027
1070
  for (var i = 0, len = temp.length; i < len; i++) {
1028
1071
  var ri = temp[i];
1029
- if (ri.segment.tileZoom === this.maxCurrZoom) {
1072
+ let ht = ri.segment.centerNormal.dot(cam._b);
1073
+ if (ri.segment.tileZoom === this.maxCurrZoom || ht < HORIZON_TANGENT) {
1030
1074
  this._renderedNodes.push(ri);
1031
1075
  let k = 0,
1032
1076
  inFrustum = ri.inFrustum;
@@ -1076,9 +1120,7 @@ export class Planet extends RenderNode {
1076
1120
  frame() {
1077
1121
  this._renderScreenNodesPASS();
1078
1122
 
1079
- if (this.renderer.isActiveBackbuffers) {
1080
- this._renderHeightPickingFramebufferPASS();
1081
- }
1123
+ this._renderHeightPickingFramebufferPASS();
1082
1124
 
1083
1125
  this.drawEntityCollections(this._frustumEntityCollections);
1084
1126
  }
@@ -1156,11 +1198,8 @@ export class Planet extends RenderNode {
1156
1198
 
1157
1199
  // bind night glowing material
1158
1200
  gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
1159
- gl.bindTexture(
1160
- gl.TEXTURE_2D,
1161
- (this.camera._lonLat.height > 329958.0 &&
1162
- (this._nightTexture || this.transparentTexture)) ||
1163
- this.transparentTexture
1201
+ gl.bindTexture(gl.TEXTURE_2D,
1202
+ (this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture
1164
1203
  );
1165
1204
  gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
1166
1205
 
@@ -1227,63 +1266,45 @@ export class Planet extends RenderNode {
1227
1266
  * @protected
1228
1267
  */
1229
1268
  _renderHeightPickingFramebufferPASS() {
1230
- this._heightPickingFramebuffer.activate();
1231
-
1232
- let sh;
1233
- let renderer = this.renderer;
1234
- let h = renderer.handler;
1235
- let gl = h.gl;
1236
- let cam = renderer.activeCamera;
1237
- let frustumIndex = cam.getCurrentFrustum();
1269
+ if (!this.terrain.isEmpty) {
1238
1270
 
1239
- if (frustumIndex === cam.FARTHEST_FRUSTUM_INDEX) {
1240
- gl.clearColor(0.0, 0.0, 0.0, 1.0);
1241
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
1242
- } else {
1243
- gl.clear(gl.DEPTH_BUFFER_BIT);
1244
- }
1271
+ this._heightPickingFramebuffer.activate();
1245
1272
 
1246
- gl.enable(gl.CULL_FACE);
1247
- gl.blendEquation(gl.FUNC_ADD);
1248
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
1249
- gl.enable(gl.BLEND);
1273
+ let sh;
1274
+ let renderer = this.renderer;
1275
+ let h = renderer.handler;
1276
+ let gl = h.gl;
1277
+ let cam = renderer.activeCamera;
1278
+ let frustumIndex = cam.getCurrentFrustum();
1250
1279
 
1251
- h.programs.drawnode_heightPicking.activate();
1252
- sh = h.programs.drawnode_heightPicking._program;
1253
- let shu = sh.uniforms;
1280
+ if (frustumIndex === cam.FARTHEST_FRUSTUM_INDEX) {
1281
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
1282
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
1283
+ } else {
1284
+ gl.clear(gl.DEPTH_BUFFER_BIT);
1285
+ }
1254
1286
 
1255
- gl.uniformMatrix4fv(shu.viewMatrix, false, renderer.activeCamera.getViewMatrix());
1256
- gl.uniformMatrix4fv(
1257
- shu.projectionMatrix,
1258
- false,
1259
- renderer.activeCamera.getProjectionMatrix()
1260
- );
1287
+ h.programs.drawnode_heightPicking.activate();
1288
+ sh = h.programs.drawnode_heightPicking._program;
1289
+ let shu = sh.uniforms;
1261
1290
 
1262
- gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
1263
- gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1291
+ gl.uniformMatrix4fv(shu.viewMatrix, false, renderer.activeCamera.getViewMatrix());
1292
+ gl.uniformMatrix4fv(shu.projectionMatrix, false, renderer.activeCamera.getProjectionMatrix());
1264
1293
 
1265
- // drawing planet nodes
1266
- var rn = this._renderedNodesInFrustum[frustumIndex],
1267
- sl = this._visibleTileLayerSlices;
1294
+ gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
1295
+ gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1268
1296
 
1269
- let i = rn.length;
1270
- while (i--) {
1271
- rn[i].segment.heightPickingRendering(sh, sl[0], 0);
1272
- }
1297
+ // drawing planet nodes
1298
+ var rn = this._renderedNodesInFrustum[frustumIndex],
1299
+ sl = this._visibleTileLayerSlices;
1273
1300
 
1274
- //gl.enable(gl.POLYGON_OFFSET_FILL);
1275
- for (let j = 1, len = sl.length; j < len; j++) {
1276
- i = rn.length;
1277
- //gl.polygonOffset(0, -j);
1301
+ let i = rn.length;
1278
1302
  while (i--) {
1279
- rn[i].segment.heightPickingRendering(sh, sl[j], j, this.transparentTexture, true);
1303
+ rn[i].segment.heightPickingRendering(sh, sl[0]);
1280
1304
  }
1281
- }
1282
- //gl.disable(gl.POLYGON_OFFSET_FILL);
1283
-
1284
- gl.disable(gl.BLEND);
1285
1305
 
1286
- this._heightPickingFramebuffer.deactivate();
1306
+ this._heightPickingFramebuffer.deactivate();
1307
+ }
1287
1308
  }
1288
1309
 
1289
1310
  /**
@@ -1362,15 +1383,7 @@ export class Planet extends RenderNode {
1362
1383
 
1363
1384
  let i = rn.length;
1364
1385
  while (i--) {
1365
- rn[i].segment.depthRendering(sh, sl[0], 0);
1366
- }
1367
-
1368
- for (let j = 1, len = sl.length; j < len; j++) {
1369
- i = rn.length;
1370
- gl.polygonOffset(0, -j);
1371
- while (i--) {
1372
- rn[i].segment.depthRendering(sh, sl[j], j, this.transparentTexture, true);
1373
- }
1386
+ rn[i].segment.depthRendering(sh, sl[0]);
1374
1387
  }
1375
1388
  }
1376
1389
 
@@ -1561,41 +1574,48 @@ export class Planet extends RenderNode {
1561
1574
  * @returns {number} -
1562
1575
  */
1563
1576
  getDistanceFromPixel(px) {
1564
- let r = this.renderer,
1565
- cnv = this.renderer.handler.canvas;
1577
+ if (this.terrain.isEmpty) {
1578
+ return this.getDistanceFromPixelEllipsoid(px) || 0;
1579
+ } else {
1566
1580
 
1567
- let spx = px.x / cnv.width,
1568
- spy = (cnv.height - px.y) / cnv.height;
1581
+ let r = this.renderer,
1582
+ cnv = this.renderer.handler.canvas;
1569
1583
 
1570
- // HEIGHT
1571
- this._heightPickingFramebuffer.activate();
1572
- if (this._heightPickingFramebuffer.isComplete()) {
1573
- this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
1574
- }
1575
- this._heightPickingFramebuffer.deactivate();
1576
-
1577
- let dist = decodeFloatFromRGBAArr(_tempPickingPix_);
1578
-
1579
- if (!(_tempPickingPix_[0] || _tempPickingPix_[1] || _tempPickingPix_[2])) {
1580
- dist = this.getDistanceFromPixelEllipsoid(px) || 0;
1581
- } else if (dist < DEPTH_DISTANCE) {
1582
- r.screenDepthFramebuffer.activate();
1583
- if (r.screenDepthFramebuffer.isComplete()) {
1584
- r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
1585
- let screenPos = new Vec4(
1586
- spx * 2.0 - 1.0,
1587
- spy * 2.0 - 1.0,
1588
- (_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
1589
- 1.0 * 2.0 - 1.0
1590
- );
1591
- let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
1592
- let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1593
- dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
1584
+ let spx = px.x / cnv.width,
1585
+ spy = (cnv.height - px.y) / cnv.height;
1586
+
1587
+ _tempPickingPix_[0] = _tempPickingPix_[1] = _tempPickingPix_[2] = 0.0;
1588
+
1589
+ let dist = 0;
1590
+
1591
+ // HEIGHT
1592
+ this._heightPickingFramebuffer.activate();
1593
+ if (this._heightPickingFramebuffer.isComplete()) {
1594
+ this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
1595
+ dist = decodeFloatFromRGBAArr(_tempPickingPix_);
1594
1596
  }
1595
- r.screenDepthFramebuffer.deactivate();
1597
+ this._heightPickingFramebuffer.deactivate();
1598
+
1599
+ if (!(_tempPickingPix_[0] || _tempPickingPix_[1] || _tempPickingPix_[2])) {
1600
+ dist = this.getDistanceFromPixelEllipsoid(px) || 0;
1601
+ } else if (dist < DEPTH_DISTANCE) {
1602
+ r.screenDepthFramebuffer.activate();
1603
+ if (r.screenDepthFramebuffer.isComplete()) {
1604
+ r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
1605
+ let screenPos = new Vec4(
1606
+ spx * 2.0 - 1.0,
1607
+ spy * 2.0 - 1.0,
1608
+ (_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
1609
+ 1.0 * 2.0 - 1.0
1610
+ );
1611
+ let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
1612
+ let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1613
+ dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
1614
+ }
1615
+ r.screenDepthFramebuffer.deactivate();
1616
+ }
1617
+ return dist;
1596
1618
  }
1597
-
1598
- return dist;
1599
1619
  }
1600
1620
 
1601
1621
  /**