@openglobus/og 0.11.7 → 0.12.3

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 (211) hide show
  1. package/css/og.css +5 -2
  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/Lighting.js +52 -73
  14. package/src/og/control/MouseNavigation.js +30 -29
  15. package/src/og/control/MouseWheelZoomControl.js +257 -0
  16. package/src/og/control/Sun.js +3 -3
  17. package/src/og/control/index.js +2 -0
  18. package/src/og/control/visibleExtent/Segment.js +1862 -0
  19. package/src/og/control/visibleExtent/VisibleExtent.js +80 -0
  20. package/src/og/control/visibleExtent/drawnode.js +751 -0
  21. package/src/og/entity/BaseBillboard.js +9 -9
  22. package/src/og/entity/Entity.js +742 -742
  23. package/src/og/entity/GeoObjectHandler.js +138 -134
  24. package/src/og/entity/Label.js +7 -7
  25. package/src/og/entity/LabelHandler.js +2 -1
  26. package/src/og/layer/CanvasTiles.js +8 -12
  27. package/src/og/layer/GeoImage.js +2 -10
  28. package/src/og/layer/GeoTexture2d.js +2 -10
  29. package/src/og/layer/GeoVideo.js +2 -10
  30. package/src/og/layer/KML.js +19 -12
  31. package/src/og/layer/Layer.js +4 -23
  32. package/src/og/layer/WMS.js +0 -2
  33. package/src/og/layer/XYZ.js +31 -33
  34. package/src/og/math/Vec3.js +18 -2
  35. package/src/og/quadTree/Node.js +48 -93
  36. package/src/og/quadTree/quadTree.js +1 -1
  37. package/src/og/renderer/Renderer.js +69 -96
  38. package/src/og/renderer/RendererEvents.js +3 -1
  39. package/src/og/scene/Planet.js +171 -173
  40. package/src/og/segment/Segment.js +99 -268
  41. package/src/og/segment/Slice.js +45 -0
  42. package/src/og/shaders/drawnode.js +171 -350
  43. package/src/og/shaders/geoObject.js +15 -6
  44. package/src/og/terrain/EmptyTerrain.js +3 -2
  45. package/src/og/terrain/GlobusTerrain.js +2 -0
  46. package/src/og/utils/GeoImageCreator.js +5 -1
  47. package/src/og/utils/Loader.js +1 -1
  48. package/src/og/utils/PlainSegmentWorker.js +0 -13
  49. package/src/og/webgl/Handler.js +14 -10
  50. package/types/Clock.d.ts +94 -0
  51. package/types/Deferred.d.ts +6 -0
  52. package/types/Events.d.ts +77 -0
  53. package/types/Extent.d.ts +166 -0
  54. package/types/Globe.d.ts +85 -0
  55. package/types/ImageCanvas.d.ts +123 -0
  56. package/types/Lock.d.ts +12 -0
  57. package/types/LonLat.d.ts +108 -0
  58. package/types/Popup.d.ts +42 -0
  59. package/types/QueueArray.d.ts +19 -0
  60. package/types/Rectangle.d.ts +80 -0
  61. package/types/Stack.d.ts +19 -0
  62. package/types/ajax.d.ts +24 -0
  63. package/types/arial.d.ts +48 -0
  64. package/types/astro/astro.d.ts +38 -0
  65. package/types/astro/earth.d.ts +7 -0
  66. package/types/astro/jd.d.ts +254 -0
  67. package/types/bv/Box.d.ts +30 -0
  68. package/types/bv/Sphere.d.ts +38 -0
  69. package/types/bv/index.d.ts +3 -0
  70. package/types/camera/Camera.d.ts +312 -0
  71. package/types/camera/Frustum.d.ts +133 -0
  72. package/types/camera/PlanetCamera.d.ts +219 -0
  73. package/types/camera/index.d.ts +3 -0
  74. package/types/cons.d.ts +40 -0
  75. package/types/control/CompassButton.d.ts +17 -0
  76. package/types/control/Control.d.ts +104 -0
  77. package/types/control/DebugInfo.d.ts +15 -0
  78. package/types/control/EarthCoordinates.d.ts +47 -0
  79. package/types/control/EarthNavigation.d.ts +43 -0
  80. package/types/control/GeoImageDragControl.d.ts +6 -0
  81. package/types/control/KeyboardNavigation.d.ts +21 -0
  82. package/types/control/LayerSwitcher.d.ts +21 -0
  83. package/types/control/Lighting.d.ts +16 -0
  84. package/types/control/MouseNavigation.d.ts +48 -0
  85. package/types/control/MouseWheelZoomControl.d.ts +45 -0
  86. package/types/control/ScaleControl.d.ts +22 -0
  87. package/types/control/ShowFps.d.ts +11 -0
  88. package/types/control/SimpleNavigation.d.ts +25 -0
  89. package/types/control/Sun.d.ts +50 -0
  90. package/types/control/ToggleWireframe.d.ts +12 -0
  91. package/types/control/TouchNavigation.d.ts +48 -0
  92. package/types/control/ZoomControl.d.ts +27 -0
  93. package/types/control/index.d.ts +18 -0
  94. package/types/ellipsoid/Ellipsoid.d.ts +146 -0
  95. package/types/ellipsoid/index.d.ts +3 -0
  96. package/types/ellipsoid/wgs84.d.ts +6 -0
  97. package/types/entity/BaseBillboard.d.ts +215 -0
  98. package/types/entity/Billboard.d.ts +94 -0
  99. package/types/entity/BillboardHandler.d.ts +79 -0
  100. package/types/entity/Entity.d.ts +348 -0
  101. package/types/entity/EntityCollection.d.ts +317 -0
  102. package/types/entity/GeoObject.d.ts +111 -0
  103. package/types/entity/GeoObjectHandler.d.ts +81 -0
  104. package/types/entity/Geometry.d.ts +74 -0
  105. package/types/entity/GeometryHandler.d.ts +76 -0
  106. package/types/entity/Label.d.ts +189 -0
  107. package/types/entity/LabelHandler.d.ts +31 -0
  108. package/types/entity/LabelWorker.d.ts +11 -0
  109. package/types/entity/PointCloud.d.ts +174 -0
  110. package/types/entity/PointCloudHandler.d.ts +38 -0
  111. package/types/entity/Polyline.d.ts +306 -0
  112. package/types/entity/PolylineHandler.d.ts +18 -0
  113. package/types/entity/Ray.d.ts +124 -0
  114. package/types/entity/RayHandler.d.ts +67 -0
  115. package/types/entity/ShapeHandler.d.ts +22 -0
  116. package/types/entity/Strip.d.ts +119 -0
  117. package/types/entity/StripHandler.d.ts +38 -0
  118. package/types/entity/index.d.ts +8 -0
  119. package/types/index.core.d.ts +65 -0
  120. package/types/index.d.ts +45 -0
  121. package/types/index.webgl.d.ts +7 -0
  122. package/types/input/KeyboardHandler.d.ts +10 -0
  123. package/types/input/MouseHandler.d.ts +5 -0
  124. package/types/input/TouchHandler.d.ts +5 -0
  125. package/types/input/input.d.ts +34 -0
  126. package/types/layer/BaseGeoImage.d.ts +94 -0
  127. package/types/layer/CanvasTiles.d.ts +67 -0
  128. package/types/layer/GeoImage.d.ts +52 -0
  129. package/types/layer/GeoTexture2d.d.ts +8 -0
  130. package/types/layer/GeoVideo.d.ts +55 -0
  131. package/types/layer/KML.d.ts +68 -0
  132. package/types/layer/Layer.d.ts +310 -0
  133. package/types/layer/Material.d.ts +45 -0
  134. package/types/layer/Vector.d.ts +208 -0
  135. package/types/layer/WMS.d.ts +61 -0
  136. package/types/layer/XYZ.d.ts +119 -0
  137. package/types/layer/index.d.ts +10 -0
  138. package/types/light/LightSource.d.ts +178 -0
  139. package/types/math/Line2.d.ts +11 -0
  140. package/types/math/Line3.d.ts +10 -0
  141. package/types/math/Mat3.d.ts +65 -0
  142. package/types/math/Mat4.d.ts +176 -0
  143. package/types/math/Plane.d.ts +18 -0
  144. package/types/math/Quat.d.ts +379 -0
  145. package/types/math/Ray.d.ts +82 -0
  146. package/types/math/Vec2.d.ts +309 -0
  147. package/types/math/Vec3.d.ts +467 -0
  148. package/types/math/Vec4.d.ts +162 -0
  149. package/types/math/coder.d.ts +43 -0
  150. package/types/math/index.d.ts +11 -0
  151. package/types/math.d.ts +261 -0
  152. package/types/mercator.d.ts +92 -0
  153. package/types/proj/EPSG3857.d.ts +6 -0
  154. package/types/proj/EPSG4326.d.ts +6 -0
  155. package/types/proj/Proj.d.ts +42 -0
  156. package/types/quadTree/EntityCollectionNode.d.ts +34 -0
  157. package/types/quadTree/Node.d.ts +60 -0
  158. package/types/quadTree/quadTree.d.ts +40 -0
  159. package/types/renderer/Renderer.d.ts +290 -0
  160. package/types/renderer/RendererEvents.d.ts +237 -0
  161. package/types/res/images.d.ts +3 -0
  162. package/types/scene/Axes.d.ts +11 -0
  163. package/types/scene/BaseNode.d.ts +60 -0
  164. package/types/scene/Planet.d.ts +576 -0
  165. package/types/scene/RenderNode.d.ts +142 -0
  166. package/types/scene/SkyBox.d.ts +10 -0
  167. package/types/scene/index.d.ts +4 -0
  168. package/types/segment/Segment.d.ts +275 -0
  169. package/types/segment/SegmentLonLat.d.ts +17 -0
  170. package/types/segment/Slice.d.ts +10 -0
  171. package/types/segment/segmentHelper.d.ts +13 -0
  172. package/types/shaders/billboard.d.ts +3 -0
  173. package/types/shaders/depth.d.ts +2 -0
  174. package/types/shaders/drawnode.d.ts +7 -0
  175. package/types/shaders/geoObject.d.ts +3 -0
  176. package/types/shaders/label.d.ts +4 -0
  177. package/types/shaders/pointCloud.d.ts +2 -0
  178. package/types/shaders/polyline.d.ts +3 -0
  179. package/types/shaders/ray.d.ts +2 -0
  180. package/types/shaders/screenFrame.d.ts +2 -0
  181. package/types/shaders/shape.d.ts +4 -0
  182. package/types/shaders/skybox.d.ts +2 -0
  183. package/types/shaders/toneMapping.d.ts +2 -0
  184. package/types/shapes/BaseShape.d.ts +250 -0
  185. package/types/shapes/Sphere.d.ts +41 -0
  186. package/types/terrain/BilTerrain.d.ts +7 -0
  187. package/types/terrain/EmptyTerrain.d.ts +73 -0
  188. package/types/terrain/Geoid.d.ts +26 -0
  189. package/types/terrain/GlobusTerrain.d.ts +116 -0
  190. package/types/terrain/MapboxTerrain.d.ts +7 -0
  191. package/types/terrain/index.d.ts +5 -0
  192. package/types/utils/FontAtlas.d.ts +15 -0
  193. package/types/utils/GeoImageCreator.d.ts +30 -0
  194. package/types/utils/ImagesCacheManager.d.ts +10 -0
  195. package/types/utils/Loader.d.ts +25 -0
  196. package/types/utils/NormalMapCreator.d.ts +39 -0
  197. package/types/utils/PlainSegmentWorker.d.ts +10 -0
  198. package/types/utils/TerrainWorker.d.ts +9 -0
  199. package/types/utils/TextureAtlas.d.ts +111 -0
  200. package/types/utils/VectorTileCreator.d.ts +16 -0
  201. package/types/utils/colorTable.d.ts +143 -0
  202. package/types/utils/earcut.d.ts +6 -0
  203. package/types/utils/shared.d.ts +231 -0
  204. package/types/webgl/Framebuffer.d.ts +135 -0
  205. package/types/webgl/Handler.d.ts +417 -0
  206. package/types/webgl/Multisample.d.ts +89 -0
  207. package/types/webgl/Program.d.ts +161 -0
  208. package/types/webgl/ProgramController.d.ts +89 -0
  209. package/types/webgl/callbacks.d.ts +1 -0
  210. package/types/webgl/index.d.ts +6 -0
  211. package/types/webgl/types.d.ts +2 -0
@@ -4,6 +4,7 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ import * as utils from "../utils/shared.js";
7
8
  import * as shaders from "../shaders/drawnode.js";
8
9
  import * as math from "../math.js";
9
10
  import * as mercator from "../mercator.js";
@@ -31,14 +32,16 @@ import { wgs84 } from "../ellipsoid/wgs84.js";
31
32
  import { NIGHT, SPECULAR } from "../res/images.js";
32
33
  import { Geoid } from "../terrain/Geoid.js";
33
34
  import { isUndef } from "../utils/shared.js";
35
+ import { MAX_RENDERED_NODES } from "../quadTree/quadTree.js";
34
36
 
35
- const MAX_LOD = 1.0;
36
- 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
37
40
 
38
41
  let _tempPickingPix_ = new Uint8Array(4),
39
42
  _tempDepthColor_ = new Uint8Array(4);
40
43
 
41
- const DEPTH_DISTANCE = 11;
44
+ const DEPTH_DISTANCE = 11;//m
42
45
 
43
46
  /**
44
47
  * Maximum created nodes count. The more nodes count the more memory usage.
@@ -48,6 +51,8 @@ const DEPTH_DISTANCE = 11;
48
51
  */
49
52
  const MAX_NODES = 200;
50
53
 
54
+ const HORIZON_TANGENT = 0.81;
55
+
51
56
  const EVENT_NAMES = [
52
57
  /**
53
58
  * Triggered before globe frame begins to render.
@@ -107,6 +112,13 @@ export class Planet extends RenderNode {
107
112
  constructor(options = {}) {
108
113
  super(options.name);
109
114
 
115
+ this._cameraFrustums = options.frustums || [
116
+ [1, 100 + 0.075],
117
+ [100, 1000 + 0.075],
118
+ [1000, 1e6 + 10000],
119
+ [1e6, 1e9]
120
+ ];
121
+
110
122
  /**
111
123
  * @public
112
124
  * @type {Ellipsoid}
@@ -335,6 +347,16 @@ export class Planet extends RenderNode {
335
347
  */
336
348
  this._specularTexture = null;
337
349
 
350
+ //TODO: replace to a function
351
+ let a = utils.createColorRGB(options.ambient, new Vec3(0.2, 0.2, 0.2));
352
+ let d = utils.createColorRGB(options.diffuse, new Vec3(0.8, 0.8, 0.8));
353
+ let s = utils.createColorRGB(options.specular, new Vec3(0.0003, 0.0003, 0.0003));
354
+ let shininess = options.shininess || 20.0;
355
+
356
+ this._ambient = new Float32Array([a.x, a.y, a.z]);
357
+ this._diffuse = new Float32Array([d.x, d.y, d.z]);
358
+ this._specular = new Float32Array([s.x, s.y, s.z, shininess]);
359
+
338
360
  /**
339
361
  * True for rendering night glowing texture.
340
362
  * @protected
@@ -367,18 +389,12 @@ export class Planet extends RenderNode {
367
389
  * @public
368
390
  * @type {number}
369
391
  */
370
- this._lodRatio = MAX_LOD;
371
- this._maxLodRatio = MAX_LOD;
372
- this._minLodRatio = MIN_LOD;
373
-
374
- this._diffuseMaterialArr = new Float32Array(this.SLICE_SIZE_3 + 3);
375
- this._ambientMaterialArr = new Float32Array(this.SLICE_SIZE_3 + 3);
376
- this._specularMaterialArr = new Float32Array(this.SLICE_SIZE_4 + 4);
377
-
378
- this._tileOffsetArr = new Float32Array(this.SLICE_SIZE_4);
379
- this._visibleExtentOffsetArr = new Float32Array(this.SLICE_SIZE_4);
380
- this._transparentColorArr = new Float32Array(this.SLICE_SIZE_4);
381
- this._pickingColorArr = new Float32Array(this.SLICE_SIZE_3);
392
+ this._lodSize = CUR_LOD_SIZE;
393
+ this._curLodSize = CUR_LOD_SIZE;
394
+ this._minLodSize = MIN_LOD_SIZE;
395
+ this._maxLodSize = MAX_LOD_SIZE;
396
+
397
+ this._pickingColorArr = new Float32Array(this.SLICE_SIZE_4);
382
398
  this._samplerArr = new Int32Array(this.SLICE_SIZE);
383
399
  this._pickingMaskArr = new Int32Array(this.SLICE_SIZE);
384
400
 
@@ -393,11 +409,11 @@ export class Planet extends RenderNode {
393
409
 
394
410
  this._normalMapCreator = null;
395
411
 
396
- this._terrainWorker = new TerrainWorker(2);
412
+ this._terrainWorker = new TerrainWorker(3);
397
413
 
398
- this._plainSegmentWorker = new PlainSegmentWorker(2);
414
+ this._plainSegmentWorker = new PlainSegmentWorker(4);
399
415
 
400
- this._tileLoader = new Loader(14);
416
+ this._tileLoader = new Loader(options.loadingBatchSize || 12);
401
417
 
402
418
  this._memKey = new Key();
403
419
 
@@ -429,11 +445,14 @@ export class Planet extends RenderNode {
429
445
  control.addTo(this.renderer);
430
446
  }
431
447
 
432
- setRatioLod(maxLod, minLod) {
433
- this._maxLodRatio = maxLod;
434
- if (minLod) {
435
- this._minLodRatio = minLod;
436
- }
448
+ get lodSize() {
449
+ return this._lodSize;
450
+ }
451
+
452
+ setLodSize(currentLodSize, minLodSize, maxLodSize) {
453
+ this._maxLodSize = maxLodSize || this._maxLodSize;
454
+ this._minLodSize = minLodSize || this._minLodSize;
455
+ this._curLodSize = currentLodSize || this._curLodSize;
437
456
  this._renderCompletedActivated = false;
438
457
  }
439
458
 
@@ -619,11 +638,8 @@ export class Planet extends RenderNode {
619
638
  var h = this.renderer.handler;
620
639
 
621
640
  h.addProgram(shaders.drawnode_screen_nl(), true);
622
-
623
641
  //h.addProgram(shaders.drawnode_screen_wl(), true);
624
-
625
642
  h.addProgram(shaders.drawnode_screen_wl_webgl2(), true);
626
-
627
643
  h.addProgram(shaders.drawnode_colorPicking(), true);
628
644
  h.addProgram(shaders.drawnode_depth(), true);
629
645
  h.addProgram(shaders.drawnode_heightPicking(), true);
@@ -716,6 +732,7 @@ export class Planet extends RenderNode {
716
732
  this.transparentTexture = this.renderer.handler.transparentTexture;
717
733
 
718
734
  this.camera = this.renderer.activeCamera = new PlanetCamera(this, {
735
+ frustums: this._cameraFrustums,
719
736
  eye: new Vec3(0, 0, 28000000),
720
737
  look: new Vec3(0, 0, 0),
721
738
  up: new Vec3(0, 1, 0),
@@ -798,38 +815,70 @@ export class Planet extends RenderNode {
798
815
  }
799
816
 
800
817
  _preRender() {
818
+ // Zoom 0
801
819
  this._quadTree.createChildrenNodes();
802
- this._quadTree.segment.createPlainSegment();
803
- this._quadTree.renderNode(true);
804
- this._normalMapCreator.drawSingle(this._quadTree.segment);
820
+ this._quadTree.segment.createPlainSegment();
805
821
 
822
+ // Zoom 1
806
823
  for (let i = 0; i < this._quadTree.nodes.length; i++) {
807
824
  this._quadTree.nodes[i].segment.createPlainSegment();
808
- this._quadTree.nodes[i].renderNode(true);
809
- this._normalMapCreator.drawSingle(this._quadTree.nodes[i].segment);
810
825
  }
811
826
 
827
+ // same for poles
812
828
  this._quadTreeNorth.createChildrenNodes();
813
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;
814
852
  this._quadTreeNorth.renderNode(true);
815
853
  this._normalMapCreator.drawSingle(this._quadTreeNorth.segment);
816
854
 
817
855
  for (let i = 0; i < this._quadTreeNorth.nodes.length; i++) {
818
- this._quadTreeNorth.nodes[i].segment.createPlainSegment();
856
+ this._quadTreeNorth.nodes[i].segment.passReady = true;
819
857
  this._quadTreeNorth.nodes[i].renderNode(true);
820
858
  this._normalMapCreator.drawSingle(this._quadTreeNorth.nodes[i].segment);
821
859
  }
822
860
 
823
- this._quadTreeSouth.createChildrenNodes();
824
- this._quadTreeSouth.segment.createPlainSegment();
861
+ this._quadTreeSouth.segment.passReady = true;
825
862
  this._quadTreeSouth.renderNode(true);
826
863
  this._normalMapCreator.drawSingle(this._quadTreeSouth.segment);
827
864
 
828
865
  for (let i = 0; i < this._quadTreeSouth.nodes.length; i++) {
829
- this._quadTreeSouth.nodes[i].segment.createPlainSegment();
866
+ this._quadTreeSouth.nodes[i].segment.passReady = true;
830
867
  this._quadTreeSouth.nodes[i].renderNode(true);
831
868
  this._normalMapCreator.drawSingle(this._quadTreeSouth.nodes[i].segment);
832
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);
833
882
  }
834
883
 
835
884
  /**
@@ -907,6 +956,7 @@ export class Planet extends RenderNode {
907
956
  if (li._attribution.length) {
908
957
  html += "<li>" + li._attribution + "</li>";
909
958
  }
959
+
910
960
  } else if (li._fading && li._fadingOpacity > 0) {
911
961
  if (li.hasImageryTiles()) {
912
962
  this.visibleTileLayers.push(li);
@@ -980,16 +1030,10 @@ export class Planet extends RenderNode {
980
1030
  _collectRenderNodes() {
981
1031
  let cam = this.camera;
982
1032
 
983
- this._lodRatio = math.lerp(
984
- cam.slope < 0.0 ? 0.0 : cam.slope,
985
- this._maxLodRatio,
986
- this._minLodRatio
987
- );
1033
+ this._lodSize = math.lerp(cam.slope < 0.0 ? 0.0 : cam.slope, this._curLodSize, this._minLodSize);
988
1034
 
989
1035
  cam._insideSegment = null;
990
1036
 
991
- this._nodeCounterError_ = 0;
992
-
993
1037
  // clear first
994
1038
  this._clearRenderedNodeList();
995
1039
 
@@ -1004,11 +1048,11 @@ export class Planet extends RenderNode {
1004
1048
 
1005
1049
  this._quadTree.renderTree(cam, 0, null);
1006
1050
 
1007
- if (
1008
- cam.slope > this.minEqualZoomCameraSlope &&
1051
+ if (cam.slope > this.minEqualZoomCameraSlope &&
1009
1052
  cam._lonLat.height < this.maxEqualZoomAltitude &&
1010
1053
  cam._lonLat.height > this.minEqualZoomAltitude
1011
1054
  ) {
1055
+
1012
1056
  this.minCurrZoom = this.maxCurrZoom;
1013
1057
 
1014
1058
  let temp = this._renderedNodes,
@@ -1025,7 +1069,8 @@ export class Planet extends RenderNode {
1025
1069
 
1026
1070
  for (var i = 0, len = temp.length; i < len; i++) {
1027
1071
  var ri = temp[i];
1028
- 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) {
1029
1074
  this._renderedNodes.push(ri);
1030
1075
  let k = 0,
1031
1076
  inFrustum = ri.inFrustum;
@@ -1135,7 +1180,6 @@ export class Planet extends RenderNode {
1135
1180
  gl.enable(gl.BLEND);
1136
1181
  gl.blendEquation(gl.FUNC_ADD);
1137
1182
  gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
1138
- //gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ZERO);
1139
1183
 
1140
1184
  if (this.lightEnabled) {
1141
1185
  h.programs.drawnode_screen_wl.activate();
@@ -1148,13 +1192,14 @@ export class Planet extends RenderNode {
1148
1192
  gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
1149
1193
  gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
1150
1194
 
1195
+ gl.uniform3fv(shu.diffuse, this._diffuse);
1196
+ gl.uniform3fv(shu.ambient, this._ambient);
1197
+ gl.uniform4fv(shu.specular, this._specular);
1198
+
1151
1199
  // bind night glowing material
1152
1200
  gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
1153
- gl.bindTexture(
1154
- gl.TEXTURE_2D,
1155
- (this.camera._lonLat.height > 329958.0 &&
1156
- (this._nightTexture || this.transparentTexture)) ||
1157
- this.transparentTexture
1201
+ gl.bindTexture(gl.TEXTURE_2D,
1202
+ (this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture
1158
1203
  );
1159
1204
  gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
1160
1205
 
@@ -1163,34 +1208,6 @@ export class Planet extends RenderNode {
1163
1208
  gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
1164
1209
  gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
1165
1210
 
1166
- var b = this.baseLayer;
1167
- if (b) {
1168
- this._diffuseMaterialArr[0] = b.diffuse.x;
1169
- this._diffuseMaterialArr[1] = b.diffuse.y;
1170
- this._diffuseMaterialArr[2] = b.diffuse.z;
1171
-
1172
- this._ambientMaterialArr[0] = b.ambient.x;
1173
- this._ambientMaterialArr[1] = b.ambient.y;
1174
- this._ambientMaterialArr[2] = b.ambient.z;
1175
-
1176
- this._specularMaterialArr[0] = b.specular.x;
1177
- this._specularMaterialArr[1] = b.specular.y;
1178
- this._specularMaterialArr[2] = b.specular.z;
1179
- this._specularMaterialArr[3] = b.shininess;
1180
- } else {
1181
- this._diffuseMaterialArr[0] = 0.89;
1182
- this._diffuseMaterialArr[1] = 0.9;
1183
- this._diffuseMaterialArr[2] = 0.83;
1184
-
1185
- this._ambientMaterialArr[0] = 0.0;
1186
- this._ambientMaterialArr[1] = 0.0;
1187
- this._ambientMaterialArr[2] = 0.0;
1188
-
1189
- this._specularMaterialArr[0] = 0.0003;
1190
- this._specularMaterialArr[1] = 0.00012;
1191
- this._specularMaterialArr[2] = 0.00001;
1192
- this._specularMaterialArr[3] = 20.0;
1193
- }
1194
1211
  } else {
1195
1212
  h.programs.drawnode_screen_nl.activate();
1196
1213
  sh = h.programs.drawnode_screen_nl._program;
@@ -1249,63 +1266,45 @@ export class Planet extends RenderNode {
1249
1266
  * @protected
1250
1267
  */
1251
1268
  _renderHeightPickingFramebufferPASS() {
1252
- this._heightPickingFramebuffer.activate();
1253
-
1254
- let sh;
1255
- let renderer = this.renderer;
1256
- let h = renderer.handler;
1257
- let gl = h.gl;
1258
- let cam = renderer.activeCamera;
1259
- let frustumIndex = cam.getCurrentFrustum();
1269
+ if (!this.terrain.isEmpty) {
1260
1270
 
1261
- if (frustumIndex === cam.FARTHEST_FRUSTUM_INDEX) {
1262
- gl.clearColor(0.0, 0.0, 0.0, 1.0);
1263
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
1264
- } else {
1265
- gl.clear(gl.DEPTH_BUFFER_BIT);
1266
- }
1271
+ this._heightPickingFramebuffer.activate();
1267
1272
 
1268
- gl.enable(gl.CULL_FACE);
1269
- gl.blendEquation(gl.FUNC_ADD);
1270
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
1271
- 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();
1272
1279
 
1273
- h.programs.drawnode_heightPicking.activate();
1274
- sh = h.programs.drawnode_heightPicking._program;
1275
- 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
+ }
1276
1286
 
1277
- gl.uniformMatrix4fv(shu.viewMatrix, false, renderer.activeCamera.getViewMatrix());
1278
- gl.uniformMatrix4fv(
1279
- shu.projectionMatrix,
1280
- false,
1281
- renderer.activeCamera.getProjectionMatrix()
1282
- );
1287
+ h.programs.drawnode_heightPicking.activate();
1288
+ sh = h.programs.drawnode_heightPicking._program;
1289
+ let shu = sh.uniforms;
1283
1290
 
1284
- gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
1285
- gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1291
+ gl.uniformMatrix4fv(shu.viewMatrix, false, renderer.activeCamera.getViewMatrix());
1292
+ gl.uniformMatrix4fv(shu.projectionMatrix, false, renderer.activeCamera.getProjectionMatrix());
1286
1293
 
1287
- // drawing planet nodes
1288
- var rn = this._renderedNodesInFrustum[frustumIndex],
1289
- sl = this._visibleTileLayerSlices;
1294
+ gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
1295
+ gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1290
1296
 
1291
- let i = rn.length;
1292
- while (i--) {
1293
- rn[i].segment.heightPickingRendering(sh, sl[0], 0);
1294
- }
1297
+ // drawing planet nodes
1298
+ var rn = this._renderedNodesInFrustum[frustumIndex],
1299
+ sl = this._visibleTileLayerSlices;
1295
1300
 
1296
- //gl.enable(gl.POLYGON_OFFSET_FILL);
1297
- for (let j = 1, len = sl.length; j < len; j++) {
1298
- i = rn.length;
1299
- //gl.polygonOffset(0, -j);
1301
+ let i = rn.length;
1300
1302
  while (i--) {
1301
- rn[i].segment.heightPickingRendering(sh, sl[j], j, this.transparentTexture, true);
1303
+ rn[i].segment.heightPickingRendering(sh, sl[0]);
1302
1304
  }
1303
- }
1304
- //gl.disable(gl.POLYGON_OFFSET_FILL);
1305
1305
 
1306
- gl.disable(gl.BLEND);
1307
-
1308
- this._heightPickingFramebuffer.deactivate();
1306
+ this._heightPickingFramebuffer.deactivate();
1307
+ }
1309
1308
  }
1310
1309
 
1311
1310
  /**
@@ -1368,6 +1367,7 @@ export class Planet extends RenderNode {
1368
1367
  let cam = renderer.activeCamera;
1369
1368
 
1370
1369
  gl.disable(gl.BLEND);
1370
+ gl.disable(gl.POLYGON_OFFSET_FILL);
1371
1371
 
1372
1372
  gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
1373
1373
  gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
@@ -1383,16 +1383,7 @@ export class Planet extends RenderNode {
1383
1383
 
1384
1384
  let i = rn.length;
1385
1385
  while (i--) {
1386
- rn[i].segment.depthRendering(sh, sl[0], 0);
1387
- }
1388
-
1389
- gl.enable(gl.POLYGON_OFFSET_FILL);
1390
- for (let j = 1, len = sl.length; j < len; j++) {
1391
- i = rn.length;
1392
- gl.polygonOffset(0, -j);
1393
- while (i--) {
1394
- rn[i].segment.depthRendering(sh, sl[j], j, this.transparentTexture, true);
1395
- }
1386
+ rn[i].segment.depthRendering(sh, sl[0]);
1396
1387
  }
1397
1388
  }
1398
1389
 
@@ -1492,12 +1483,11 @@ export class Planet extends RenderNode {
1492
1483
  * Returns 3d cartesian coordinates on the relief planet by mouse cursor
1493
1484
  * position or null if mouse cursor is outside the planet.
1494
1485
  * @public
1495
- * @param {Boolean} [force=false] - Force framebuffer rendering.
1496
1486
  * @returns {Vec3} -
1497
1487
  */
1498
- getCartesianFromMouseTerrain(force) {
1488
+ getCartesianFromMouseTerrain() {
1499
1489
  var ms = this.renderer.events.mouseState;
1500
- var distance = this.getDistanceFromPixel(ms, force);
1490
+ var distance = this.getDistanceFromPixel(ms);
1501
1491
  if (distance) {
1502
1492
  return ms.direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
1503
1493
  }
@@ -1512,8 +1502,8 @@ export class Planet extends RenderNode {
1512
1502
  * @param {Boolean} [force=false] - Force framebuffer rendering.
1513
1503
  * @returns {Vec3} -
1514
1504
  */
1515
- getCartesianFromPixelTerrain(px, force) {
1516
- var distance = this.getDistanceFromPixel(px, force);
1505
+ getCartesianFromPixelTerrain(px) {
1506
+ var distance = this.getDistanceFromPixel(px);
1517
1507
  if (distance) {
1518
1508
  var direction = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1519
1509
  return direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
@@ -1584,40 +1574,48 @@ export class Planet extends RenderNode {
1584
1574
  * @returns {number} -
1585
1575
  */
1586
1576
  getDistanceFromPixel(px) {
1587
- let r = this.renderer,
1588
- cnv = this.renderer.handler.canvas;
1589
-
1590
- let spx = px.x / cnv.width,
1591
- spy = (cnv.height - px.y) / cnv.height;
1592
-
1593
- // HEIGHT
1594
- this._heightPickingFramebuffer.activate();
1595
- this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
1596
- this._heightPickingFramebuffer.deactivate();
1597
-
1598
- let dist = decodeFloatFromRGBAArr(_tempPickingPix_);
1599
-
1600
- if (!(_tempPickingPix_[0] || _tempPickingPix_[1] || _tempPickingPix_[2])) {
1601
- dist = this.getDistanceFromPixelEllipsoid(px) || 0;
1602
- } else if (dist < DEPTH_DISTANCE) {
1603
- r.screenDepthFramebuffer.activate();
1604
- r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy, 0);
1605
- r.screenDepthFramebuffer.deactivate();
1606
-
1607
- let screenPos = new Vec4(
1608
- spx * 2.0 - 1.0,
1609
- spy * 2.0 - 1.0,
1610
- (_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
1611
- 1.0 * 2.0 - 1.0
1612
- );
1613
- let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
1614
- let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1615
- dist =
1616
- -(viewPosition.z / viewPosition.w) /
1617
- dir.dot(this.renderer.activeCamera.getForward());
1618
- }
1577
+ if (this.terrain.isEmpty) {
1578
+ return this.getDistanceFromPixelEllipsoid(px) || 0;
1579
+ } else {
1580
+
1581
+ let r = this.renderer,
1582
+ cnv = this.renderer.handler.canvas;
1583
+
1584
+ let spx = px.x / cnv.width,
1585
+ spy = (cnv.height - px.y) / cnv.height;
1619
1586
 
1620
- return dist;
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_);
1596
+ }
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;
1618
+ }
1621
1619
  }
1622
1620
 
1623
1621
  /**