@openglobus/og 0.11.5 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/css/og.css +5 -2
  2. package/package.json +12 -14
  3. package/src/og/Clock.js +6 -10
  4. package/src/og/Events.js +5 -7
  5. package/src/og/Extent.js +73 -32
  6. package/src/og/Globe.js +25 -10
  7. package/src/og/ImageCanvas.js +18 -15
  8. package/src/og/LonLat.js +13 -10
  9. package/src/og/Popup.js +19 -17
  10. package/src/og/QueueArray.js +3 -4
  11. package/src/og/Rectangle.js +4 -6
  12. package/src/og/Stack.js +2 -4
  13. package/src/og/ajax.js +20 -14
  14. package/src/og/astro/earth.js +21 -15
  15. package/src/og/bv/Box.js +2 -3
  16. package/src/og/bv/Sphere.js +10 -7
  17. package/src/og/camera/Camera.js +70 -79
  18. package/src/og/camera/Frustum.js +19 -12
  19. package/src/og/camera/PlanetCamera.js +33 -34
  20. package/src/og/control/CompassButton.js +1 -2
  21. package/src/og/control/Control.js +7 -9
  22. package/src/og/control/DebugInfo.js +2 -3
  23. package/src/og/control/EarthNavigation.js +26 -17
  24. package/src/og/control/KeyboardNavigation.js +9 -9
  25. package/src/og/control/LayerSwitcher.js +21 -20
  26. package/src/og/control/Lighting.js +74 -64
  27. package/src/og/control/MouseNavigation.js +30 -29
  28. package/src/og/control/MouseWheelZoomControl.js +257 -0
  29. package/src/og/control/SegmentBoundVisualization.js +5 -6
  30. package/src/og/control/ShowFps.js +12 -7
  31. package/src/og/control/SimpleNavigation.js +5 -7
  32. package/src/og/control/Sun.js +24 -14
  33. package/src/og/control/ToggleWireframe.js +3 -3
  34. package/src/og/control/TouchNavigation.js +43 -32
  35. package/src/og/control/ZoomControl.js +40 -24
  36. package/src/og/control/index.js +2 -0
  37. package/src/og/control/visibleExtent/Segment.js +1862 -0
  38. package/src/og/control/visibleExtent/VisibleExtent.js +80 -0
  39. package/src/og/control/visibleExtent/drawnode.js +751 -0
  40. package/src/og/ellipsoid/Ellipsoid.js +149 -57
  41. package/src/og/ellipsoid/wgs84.js +3 -3
  42. package/src/og/entity/BaseBillboard.js +72 -30
  43. package/src/og/entity/Billboard.js +9 -5
  44. package/src/og/entity/BillboardHandler.js +315 -62
  45. package/src/og/entity/Entity.js +742 -704
  46. package/src/og/entity/EntityCollection.js +47 -24
  47. package/src/og/entity/GeoObject.js +228 -0
  48. package/src/og/entity/GeoObjectHandler.js +895 -0
  49. package/src/og/entity/GeometryHandler.js +595 -123
  50. package/src/og/entity/Label.js +62 -30
  51. package/src/og/entity/LabelHandler.js +42 -243
  52. package/src/og/entity/LabelWorker.js +218 -0
  53. package/src/og/entity/Object3d.js +504 -0
  54. package/src/og/entity/PointCloud.js +76 -28
  55. package/src/og/entity/PointCloudHandler.js +5 -5
  56. package/src/og/entity/Ray.js +49 -16
  57. package/src/og/entity/Strip.js +72 -43
  58. package/src/og/entity/StripHandler.js +23 -23
  59. package/src/og/layer/BaseGeoImage.js +50 -19
  60. package/src/og/layer/CanvasTiles.js +16 -17
  61. package/src/og/layer/GeoImage.js +8 -16
  62. package/src/og/layer/GeoTexture2d.js +2 -10
  63. package/src/og/layer/GeoVideo.js +2 -10
  64. package/src/og/layer/KML.js +55 -33
  65. package/src/og/layer/Layer.js +24 -33
  66. package/src/og/layer/Material.js +1 -1
  67. package/src/og/layer/Vector.js +94 -48
  68. package/src/og/layer/WMS.js +33 -18
  69. package/src/og/layer/XYZ.js +24 -26
  70. package/src/og/light/LightSource.js +19 -12
  71. package/src/og/math/Mat3.js +24 -12
  72. package/src/og/math/Mat4.js +603 -603
  73. package/src/og/math/Plane.js +19 -18
  74. package/src/og/math/Ray.js +17 -12
  75. package/src/og/math/Vec2.js +24 -14
  76. package/src/og/math/Vec3.js +78 -32
  77. package/src/og/math/coder.js +7 -7
  78. package/src/og/proj/EPSG3857.js +3 -3
  79. package/src/og/proj/EPSG4326.js +3 -3
  80. package/src/og/proj/Proj.js +2 -4
  81. package/src/og/quadTree/Node.js +50 -95
  82. package/src/og/quadTree/quadTree.js +1 -1
  83. package/src/og/renderer/Renderer.js +106 -126
  84. package/src/og/renderer/RendererEvents.js +45 -23
  85. package/src/og/scene/BaseNode.js +2 -3
  86. package/src/og/scene/Planet.js +139 -191
  87. package/src/og/scene/RenderNode.js +15 -8
  88. package/src/og/segment/Segment.js +93 -268
  89. package/src/og/segment/Slice.js +45 -0
  90. package/src/og/shaders/drawnode.js +174 -360
  91. package/src/og/shaders/geoObject.js +211 -0
  92. package/src/og/shaders/pointCloud.js +41 -41
  93. package/src/og/shaders/shape.js +12 -18
  94. package/src/og/shaders/skybox.js +36 -36
  95. package/src/og/shaders/toneMapping.js +1 -0
  96. package/src/og/shapes/BaseShape.js +108 -36
  97. package/src/og/shapes/Icosphere.js +25 -10
  98. package/src/og/shapes/Sphere.js +8 -11
  99. package/src/og/terrain/EmptyTerrain.js +3 -2
  100. package/src/og/terrain/GlobusTerrain.js +2 -0
  101. package/src/og/utils/FontAtlas.js +6 -2
  102. package/src/og/utils/GeoImageCreator.js +5 -1
  103. package/src/og/utils/Loader.js +1 -1
  104. package/src/og/utils/PlainSegmentWorker.js +0 -13
  105. package/src/og/utils/TextureAtlas.js +18 -20
  106. package/src/og/utils/VectorTileCreator.js +1 -3
  107. package/src/og/utils/shared.js +2 -2
  108. package/src/og/webgl/Handler.js +219 -162
  109. package/src/og/webgl/Multisample.js +44 -16
  110. package/src/og/webgl/Program.js +78 -33
  111. package/src/og/webgl/callbacks.js +3 -3
  112. package/types/Clock.d.ts +0 -94
  113. package/types/Deferred.d.ts +0 -6
  114. package/types/Events.d.ts +0 -77
  115. package/types/Extent.d.ts +0 -166
  116. package/types/Globe.d.ts +0 -82
  117. package/types/ImageCanvas.d.ts +0 -123
  118. package/types/Lock.d.ts +0 -12
  119. package/types/LonLat.d.ts +0 -108
  120. package/types/Popup.d.ts +0 -42
  121. package/types/QueueArray.d.ts +0 -19
  122. package/types/Rectangle.d.ts +0 -80
  123. package/types/Stack.d.ts +0 -19
  124. package/types/ajax.d.ts +0 -24
  125. package/types/arial.d.ts +0 -48
  126. package/types/astro/astro.d.ts +0 -38
  127. package/types/astro/earth.d.ts +0 -7
  128. package/types/astro/jd.d.ts +0 -254
  129. package/types/bv/Box.d.ts +0 -30
  130. package/types/bv/Sphere.d.ts +0 -38
  131. package/types/bv/index.d.ts +0 -3
  132. package/types/camera/Camera.d.ts +0 -312
  133. package/types/camera/Frustum.d.ts +0 -133
  134. package/types/camera/PlanetCamera.d.ts +0 -218
  135. package/types/camera/index.d.ts +0 -3
  136. package/types/cons.d.ts +0 -40
  137. package/types/control/CompassButton.d.ts +0 -17
  138. package/types/control/Control.d.ts +0 -104
  139. package/types/control/DebugInfo.d.ts +0 -15
  140. package/types/control/EarthCoordinates.d.ts +0 -47
  141. package/types/control/EarthNavigation.d.ts +0 -42
  142. package/types/control/GeoImageDragControl.d.ts +0 -6
  143. package/types/control/KeyboardNavigation.d.ts +0 -21
  144. package/types/control/LayerSwitcher.d.ts +0 -21
  145. package/types/control/Lighting.d.ts +0 -16
  146. package/types/control/MouseNavigation.d.ts +0 -47
  147. package/types/control/ScaleControl.d.ts +0 -22
  148. package/types/control/ShowFps.d.ts +0 -11
  149. package/types/control/SimpleNavigation.d.ts +0 -25
  150. package/types/control/Sun.d.ts +0 -50
  151. package/types/control/ToggleWireframe.d.ts +0 -12
  152. package/types/control/TouchNavigation.d.ts +0 -48
  153. package/types/control/ZoomControl.d.ts +0 -27
  154. package/types/control/index.d.ts +0 -17
  155. package/types/ellipsoid/Ellipsoid.d.ts +0 -146
  156. package/types/ellipsoid/index.d.ts +0 -3
  157. package/types/ellipsoid/wgs84.d.ts +0 -6
  158. package/types/entity/BaseBillboard.d.ts +0 -208
  159. package/types/entity/Billboard.d.ts +0 -94
  160. package/types/entity/BillboardHandler.d.ts +0 -78
  161. package/types/entity/Entity.d.ts +0 -333
  162. package/types/entity/EntityCollection.d.ts +0 -311
  163. package/types/entity/Geometry.d.ts +0 -74
  164. package/types/entity/GeometryHandler.d.ts +0 -76
  165. package/types/entity/Label.d.ts +0 -189
  166. package/types/entity/LabelHandler.d.ts +0 -29
  167. package/types/entity/PointCloud.d.ts +0 -174
  168. package/types/entity/PointCloudHandler.d.ts +0 -38
  169. package/types/entity/Polyline.d.ts +0 -306
  170. package/types/entity/PolylineHandler.d.ts +0 -18
  171. package/types/entity/Ray.d.ts +0 -124
  172. package/types/entity/RayHandler.d.ts +0 -67
  173. package/types/entity/ShapeHandler.d.ts +0 -22
  174. package/types/entity/Strip.d.ts +0 -119
  175. package/types/entity/StripHandler.d.ts +0 -38
  176. package/types/entity/index.d.ts +0 -8
  177. package/types/index.core.d.ts +0 -65
  178. package/types/index.d.ts +0 -45
  179. package/types/index.webgl.d.ts +0 -7
  180. package/types/input/KeyboardHandler.d.ts +0 -10
  181. package/types/input/MouseHandler.d.ts +0 -5
  182. package/types/input/TouchHandler.d.ts +0 -5
  183. package/types/input/input.d.ts +0 -34
  184. package/types/layer/BaseGeoImage.d.ts +0 -94
  185. package/types/layer/CanvasTiles.d.ts +0 -68
  186. package/types/layer/GeoImage.d.ts +0 -52
  187. package/types/layer/GeoTexture2d.d.ts +0 -8
  188. package/types/layer/GeoVideo.d.ts +0 -55
  189. package/types/layer/KML.d.ts +0 -63
  190. package/types/layer/Layer.d.ts +0 -326
  191. package/types/layer/Material.d.ts +0 -45
  192. package/types/layer/Vector.d.ts +0 -208
  193. package/types/layer/WMS.d.ts +0 -63
  194. package/types/layer/XYZ.d.ts +0 -120
  195. package/types/layer/index.d.ts +0 -10
  196. package/types/light/LightSource.d.ts +0 -178
  197. package/types/math/Line2.d.ts +0 -11
  198. package/types/math/Line3.d.ts +0 -10
  199. package/types/math/Mat3.d.ts +0 -65
  200. package/types/math/Mat4.d.ts +0 -176
  201. package/types/math/Plane.d.ts +0 -18
  202. package/types/math/Quat.d.ts +0 -379
  203. package/types/math/Ray.d.ts +0 -82
  204. package/types/math/Vec2.d.ts +0 -309
  205. package/types/math/Vec3.d.ts +0 -460
  206. package/types/math/Vec4.d.ts +0 -162
  207. package/types/math/coder.d.ts +0 -43
  208. package/types/math/index.d.ts +0 -11
  209. package/types/math.d.ts +0 -261
  210. package/types/mercator.d.ts +0 -92
  211. package/types/proj/EPSG3857.d.ts +0 -6
  212. package/types/proj/EPSG4326.d.ts +0 -6
  213. package/types/proj/Proj.d.ts +0 -42
  214. package/types/quadTree/EntityCollectionNode.d.ts +0 -34
  215. package/types/quadTree/Node.d.ts +0 -61
  216. package/types/quadTree/quadTree.d.ts +0 -40
  217. package/types/renderer/Renderer.d.ts +0 -298
  218. package/types/renderer/RendererEvents.d.ts +0 -233
  219. package/types/res/images.d.ts +0 -3
  220. package/types/scene/Axes.d.ts +0 -11
  221. package/types/scene/BaseNode.d.ts +0 -60
  222. package/types/scene/Planet.d.ts +0 -577
  223. package/types/scene/RenderNode.d.ts +0 -142
  224. package/types/scene/SkyBox.d.ts +0 -10
  225. package/types/scene/index.d.ts +0 -4
  226. package/types/segment/Segment.d.ts +0 -279
  227. package/types/segment/SegmentLonLat.d.ts +0 -16
  228. package/types/segment/segmentHelper.d.ts +0 -13
  229. package/types/shaders/billboard.d.ts +0 -3
  230. package/types/shaders/depth.d.ts +0 -2
  231. package/types/shaders/drawnode.d.ts +0 -7
  232. package/types/shaders/label.d.ts +0 -4
  233. package/types/shaders/pointCloud.d.ts +0 -2
  234. package/types/shaders/polyline.d.ts +0 -3
  235. package/types/shaders/ray.d.ts +0 -2
  236. package/types/shaders/screenFrame.d.ts +0 -2
  237. package/types/shaders/shape.d.ts +0 -4
  238. package/types/shaders/skybox.d.ts +0 -2
  239. package/types/shaders/toneMapping.d.ts +0 -2
  240. package/types/shapes/BaseShape.d.ts +0 -250
  241. package/types/shapes/Sphere.d.ts +0 -41
  242. package/types/terrain/BilTerrain.d.ts +0 -7
  243. package/types/terrain/EmptyTerrain.d.ts +0 -72
  244. package/types/terrain/Geoid.d.ts +0 -26
  245. package/types/terrain/GlobusTerrain.d.ts +0 -116
  246. package/types/terrain/MapboxTerrain.d.ts +0 -7
  247. package/types/terrain/index.d.ts +0 -5
  248. package/types/utils/FontAtlas.d.ts +0 -14
  249. package/types/utils/GeoImageCreator.d.ts +0 -30
  250. package/types/utils/ImagesCacheManager.d.ts +0 -10
  251. package/types/utils/Loader.d.ts +0 -25
  252. package/types/utils/NormalMapCreator.d.ts +0 -39
  253. package/types/utils/PlainSegmentWorker.d.ts +0 -10
  254. package/types/utils/TerrainWorker.d.ts +0 -9
  255. package/types/utils/TextureAtlas.d.ts +0 -111
  256. package/types/utils/VectorTileCreator.d.ts +0 -16
  257. package/types/utils/colorTable.d.ts +0 -143
  258. package/types/utils/earcut.d.ts +0 -6
  259. package/types/utils/shared.d.ts +0 -231
  260. package/types/webgl/Framebuffer.d.ts +0 -135
  261. package/types/webgl/Handler.d.ts +0 -388
  262. package/types/webgl/Multisample.d.ts +0 -89
  263. package/types/webgl/Program.d.ts +0 -155
  264. package/types/webgl/ProgramController.d.ts +0 -89
  265. package/types/webgl/callbacks.d.ts +0 -1
  266. package/types/webgl/index.d.ts +0 -6
  267. package/types/webgl/types.d.ts +0 -2
@@ -7,7 +7,6 @@ import { Vec3 } from "../math/Vec3.js";
7
7
  import { MAX_LAT } from "../mercator.js";
8
8
  import { EPSG3857 } from "../proj/EPSG3857.js";
9
9
  import { EPSG4326 } from "../proj/EPSG4326.js";
10
- import { MAX_NORMAL_ZOOM } from "../segment/Segment.js";
11
10
  import { getMatrixSubArray, getMatrixSubArrayBoundsExt } from "../utils/shared.js";
12
11
  import {
13
12
  COMSIDE,
@@ -30,8 +29,6 @@ import {
30
29
  WALKTHROUGH
31
30
  } from "./quadTree.js";
32
31
 
33
- const VISIBLE_HEIGHT = 1400000.0;
34
-
35
32
  let _tempHigh = new Vec3(),
36
33
  _tempLow = new Vec3();
37
34
 
@@ -67,6 +64,7 @@ class Node {
67
64
 
68
65
  constructor(SegmentPrototype, planet, partId, parent, id, tileZoom, extent) {
69
66
  this.SegmentPrototype = SegmentPrototype;
67
+ planet._createdNodesCount++;
70
68
  this.planet = planet;
71
69
  this.parentNode = parent;
72
70
  this.partId = partId;
@@ -84,7 +82,6 @@ class Node {
84
82
  this._cameraInside = false;
85
83
  this.inFrustum = 0;
86
84
  this.createBounds();
87
- this.planet._createdNodesCount++;
88
85
  }
89
86
 
90
87
  createChildrenNodes() {
@@ -102,45 +99,10 @@ class Node {
102
99
  var c = new LonLat(sw.lon + size_x, sw.lat + size_y);
103
100
  var nd = this.nodes;
104
101
 
105
- nd[NW] = new Node(
106
- this.SegmentPrototype,
107
- p,
108
- NW,
109
- this,
110
- id,
111
- z,
112
- new Extent(new LonLat(sw.lon, sw.lat + size_y), new LonLat(sw.lon + size_x, ne.lat))
113
- );
114
-
115
- nd[NE] = new Node(
116
- this.SegmentPrototype,
117
- p,
118
- NE,
119
- this,
120
- id,
121
- z,
122
- new Extent(c, new LonLat(ne.lon, ne.lat))
123
- );
124
-
125
- nd[SW] = new Node(
126
- this.SegmentPrototype,
127
- p,
128
- SW,
129
- this,
130
- id,
131
- z,
132
- new Extent(new LonLat(sw.lon, sw.lat), c)
133
- );
134
-
135
- nd[SE] = new Node(
136
- this.SegmentPrototype,
137
- p,
138
- SE,
139
- this,
140
- id,
141
- z,
142
- new Extent(new LonLat(sw.lon + size_x, sw.lat), new LonLat(ne.lon, sw.lat + size_y))
143
- );
102
+ nd[NW] = new Node(this.SegmentPrototype, p, NW, this, id, z, new Extent(new LonLat(sw.lon, sw.lat + size_y), new LonLat(sw.lon + size_x, ne.lat)));
103
+ nd[NE] = new Node(this.SegmentPrototype, p, NE, this, id, z, new Extent(c, new LonLat(ne.lon, ne.lat)));
104
+ nd[SW] = new Node(this.SegmentPrototype, p, SW, this, id, z, new Extent(new LonLat(sw.lon, sw.lat), c));
105
+ nd[SE] = new Node(this.SegmentPrototype, p, SE, this, id, z, new Extent(new LonLat(sw.lon + size_x, sw.lat), new LonLat(ne.lon, sw.lat + size_y)));
144
106
  }
145
107
 
146
108
  createBounds() {
@@ -153,6 +115,15 @@ class Node {
153
115
  } else {
154
116
  seg.createBoundsByParent();
155
117
  }
118
+
119
+ let x = seg.bsphere.center.x,
120
+ y = seg.bsphere.center.y,
121
+ z = seg.bsphere.center.z;
122
+
123
+ let length = 1.0 / Math.sqrt(x * x + y * y + z * z);
124
+ seg.centerNormal.x = x * length;
125
+ seg.centerNormal.y = y * length;
126
+ seg.centerNormal.z = z * length;
156
127
  }
157
128
 
158
129
  getState() {
@@ -204,15 +175,10 @@ class Node {
204
175
  }
205
176
 
206
177
  renderTree(cam, maxZoom, terrainReadySegment, stopLoading) {
207
- if (
208
- this.planet._renderedNodes.length >= MAX_RENDERED_NODES ||
209
- this.planet._nodeCounterError_ > 2000
210
- ) {
178
+ if (this.planet._renderedNodes.length >= MAX_RENDERED_NODES) {
211
179
  return;
212
180
  }
213
181
 
214
- this.planet._nodeCounterError_++;
215
-
216
182
  this.state = WALKTHROUGH;
217
183
 
218
184
  this.neighbors[0] = null;
@@ -279,30 +245,52 @@ class Node {
279
245
  }
280
246
  }
281
247
 
282
- if (this.inFrustum || this._cameraInside || seg.tileZoom < 3) {
283
- let h = cam._lonLat.height;
248
+ if (this.inFrustum || this._cameraInside || seg.tileZoom < 3) {
249
+ let h = cam._lonLat.height;
284
250
 
285
- let altVis =
286
- cam.eye.distance(seg.bsphere.center) - seg.bsphere.radius <
287
- VISIBLE_DISTANCE * Math.sqrt(h) ||
251
+ let eye = cam.eye;
252
+ let horizonDist = eye.length2() - this.planet.ellipsoid._b2;
253
+
254
+ let altVis = seg.tileZoom > 19 ||
288
255
  (seg.tileZoom < 4 && !seg.terrainReady) ||
289
256
  seg.tileZoom < 2;
290
257
 
258
+ if (h > 21000) {
259
+ altVis = altVis || eye.distance2(seg._sw) < horizonDist
260
+ || eye.distance2(seg._nw) < horizonDist
261
+ || eye.distance2(seg._ne) < horizonDist
262
+ || eye.distance2(seg._se) < horizonDist;
263
+ } else {
264
+ altVis = altVis || cam.eye.distance(seg.bsphere.center) - seg.bsphere.radius < VISIBLE_DISTANCE * Math.sqrt(h);
265
+ }
266
+
291
267
  if ((this.inFrustum && (altVis || h > 10000.0)) || this._cameraInside) {
292
268
  seg._collectVisibleNodes();
293
269
  }
294
270
 
295
271
  if (seg.tileZoom < 2 && seg.normalMapReady) {
296
272
  this.traverseNodes(cam, maxZoom, terrainReadySegment, stopLoading);
297
- } else if ((!maxZoom && seg.acceptForRendering(cam)) || seg.tileZoom === maxZoom) {
298
- this.prepareForRendering(cam, altVis, this.inFrustum, terrainReadySegment, stopLoading);
299
- } else if (seg.tileZoom < planet.terrain._maxNodeZoom && seg.terrainReady) {
300
- // Deleting terrainReady here, you have to remove
301
- // this.appliedTerrainNodeId !== pn.nodeId in whileTerrainLoading,
302
- // also have to fix createBoundsByParent(*)
273
+ } else if (seg.terrainReady && (
274
+ !maxZoom && cam.projectedSize(seg.bsphere.center, seg._plainRadius) < planet._lodSize ||
275
+ maxZoom && ((seg.tileZoom === maxZoom) || !altVis))) {
276
+
277
+ if (altVis) {
278
+ seg.loadTile = true;
279
+ this.renderNode(this.inFrustum, !this.inFrustum, terrainReadySegment, stopLoading);
280
+ } else {
281
+ this.state = NOTRENDERING;
282
+ }
283
+
284
+ } else if (
285
+ seg.terrainReady &&
286
+ seg.tileZoom < planet.terrain._maxNodeZoom &&
287
+ (!maxZoom || maxZoom && cam.projectedSize(seg.bsphere.center, seg.bsphere.radius) > this.planet._maxLodSize)) {
303
288
  this.traverseNodes(cam, maxZoom, seg, stopLoading);
289
+ } else if (altVis) {
290
+ seg.loadTile = false;
291
+ this.renderNode(this.inFrustum, !this.inFrustum, terrainReadySegment, stopLoading);
304
292
  } else {
305
- this.prepareForRendering(cam, altVis, this.inFrustum, terrainReadySegment, stopLoading);
293
+ this.state = NOTRENDERING;
306
294
  }
307
295
  } else {
308
296
  this.state = NOTRENDERING;
@@ -322,39 +310,6 @@ class Node {
322
310
  n[3].renderTree(cam, maxZoom, terrainReadySegment, stopLoading);
323
311
  }
324
312
 
325
- prepareForRendering(
326
- cam,
327
- altVis,
328
- inFrustum,
329
- terrainReadySegment,
330
- stopLoading
331
- ) {
332
- let seg = this.segment;
333
-
334
- if (cam._lonLat.height < VISIBLE_HEIGHT) {
335
- if (altVis) {
336
- this.renderNode(inFrustum, !inFrustum, terrainReadySegment, stopLoading);
337
- } else {
338
- this.state = NOTRENDERING;
339
- }
340
- } else {
341
- if (seg.tileZoom < 2) {
342
- this.renderNode(inFrustum, !inFrustum, terrainReadySegment, stopLoading);
343
- } else if (seg.tileZoom > MAX_NORMAL_ZOOM) {
344
- this.renderNode(inFrustum, !inFrustum, terrainReadySegment, stopLoading);
345
- } else if (
346
- seg._swNorm.dot(cam._n) > 0.0 ||
347
- seg._nwNorm.dot(cam._n) > 0.0 ||
348
- seg._neNorm.dot(cam._n) > 0.0 ||
349
- seg._seNorm.dot(cam._n) > 0.0
350
- ) {
351
- this.renderNode(inFrustum, !inFrustum, terrainReadySegment, stopLoading);
352
- } else {
353
- this.state = NOTRENDERING;
354
- }
355
- }
356
- }
357
-
358
313
  renderNode(inFrustum, onlyTerrain, terrainReadySegment, stopLoading) {
359
314
  var seg = this.segment;
360
315
 
@@ -376,7 +331,7 @@ class Node {
376
331
  }
377
332
 
378
333
  // Create normal map texture
379
- if (seg.planet.lightEnabled && !seg.normalMapReady && !seg.parentNormalMapReady) {
334
+ if (seg.planet.lightEnabled && !seg.normalMapReady /*&& !seg.parentNormalMapReady*/) {
380
335
  this.whileNormalMapCreating();
381
336
  }
382
337
 
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  export const VISIBLE_DISTANCE = 3570.0;
4
- export const MAX_RENDERED_NODES = 700;
4
+ export const MAX_RENDERED_NODES = 1000;
5
5
 
6
6
  export const NW = 0;
7
7
  export const NE = 1;
@@ -16,6 +16,7 @@ import { TextureAtlas } from "../utils/TextureAtlas.js";
16
16
  import * as arial from "../arial.js";
17
17
  import { depth } from "../shaders/depth.js";
18
18
  import { ARIAL_FONT_B64 } from "../res/images.js";
19
+ import { LabelWorker } from "../entity/LabelWorker.js";
19
20
 
20
21
  let __pickingCallbackCounter__ = 0;
21
22
 
@@ -55,7 +56,6 @@ let __depthCallbackCounter__ = 0;
55
56
  * @fires og.RendererEvents#touchenter
56
57
  */
57
58
  class Renderer {
58
-
59
59
  constructor(handler, params) {
60
60
  params = params || {};
61
61
 
@@ -73,9 +73,9 @@ class Renderer {
73
73
  */
74
74
  this.handler = handler;
75
75
 
76
- this.exposure = 4;
76
+ this.exposure = 3.01;
77
77
 
78
- this.gamma = 0.5;
78
+ this.gamma = 0.47;
79
79
 
80
80
  this.whitepoint = 1.0;
81
81
 
@@ -159,13 +159,11 @@ class Renderer {
159
159
 
160
160
  this.depthFramebuffer = null;
161
161
 
162
- this._msaa = params.msaa || 8;
162
+ this._msaa = params.msaa || 4;
163
163
  this._internalFormat = "RGBA16F";
164
164
  this._format = "RGBA";
165
165
  this._type = "FLOAT";
166
166
 
167
- this._screenScale = params.screenScale || 1.0;
168
-
169
167
  this.sceneFramebuffer = null;
170
168
 
171
169
  this.blitFramebuffer = null;
@@ -184,8 +182,7 @@ class Renderer {
184
182
  * @private
185
183
  * @type {Array.<number>} - (exactly 3 entries)
186
184
  */
187
- this._prevPickingColor = [0, 0, 0];
188
-
185
+ this._prevPickingColor = new Uint8Array(4);
189
186
  this._tempPickingColor_ = new Uint8Array(4);
190
187
 
191
188
  this._initialized = false;
@@ -212,6 +209,8 @@ class Renderer {
212
209
  }
213
210
 
214
211
  this._currentOutput = "screen";
212
+
213
+ this.labelWorker = new LabelWorker();
215
214
  }
216
215
 
217
216
  /**
@@ -222,11 +221,6 @@ class Renderer {
222
221
  this.events.active = activity;
223
222
  }
224
223
 
225
- setScreenScale(scale) {
226
- this._screenScale = scale;
227
- this._resize();
228
- }
229
-
230
224
  addDepthCallback(sender, callback) {
231
225
  var id = __depthCallbackCounter__++;
232
226
  this._depthCallbacks.push({
@@ -331,7 +325,7 @@ class Renderer {
331
325
  * @returns {number} -
332
326
  */
333
327
  getWidth() {
334
- return this.handler.canvas.width;
328
+ return this.handler.canvas.clientWidth;
335
329
  }
336
330
 
337
331
  /**
@@ -340,7 +334,7 @@ class Renderer {
340
334
  * @returns {number} -
341
335
  */
342
336
  getHeight() {
343
- return this.handler.canvas.height;
337
+ return this.handler.canvas.clientHeight;
344
338
  }
345
339
 
346
340
  /**
@@ -350,7 +344,7 @@ class Renderer {
350
344
  */
351
345
  getCenter() {
352
346
  var cnv = this.handler.canvas;
353
- return new Vec2(Math.round(cnv.width * 0.5), Math.round(cnv.height * 0.5));
347
+ return new Vec2(Math.round(cnv.clientWidth * 0.5), Math.round(cnv.clientHeight * 0.5));
354
348
  }
355
349
 
356
350
  /**
@@ -429,20 +423,10 @@ class Renderer {
429
423
  useDepth: false
430
424
  }).init();
431
425
 
432
- //this.depthFramebuffer = new Framebuffer(this.handler, {
433
- // size: 2,
434
- // internalFormat: ["RGBA", "RGBA"],
435
- // format: ["RGBA", "RGBA"],
436
- // type: ["UNSIGNED_BYTE", "UNSIGNED_BYTE"],
437
- // attachment: ["COLOR_ATTACHMENT", "COLOR_ATTACHMENT"],
438
- // useDepth: true
439
- //}).init();
440
426
  this.screenDepthFramebuffer = new Framebuffer(this.handler, {
441
427
  useDepth: false
442
428
  }).init();
443
429
 
444
- this.readPixels = () => { };
445
-
446
430
  if (this.handler.gl.type === "webgl") {
447
431
  this.sceneFramebuffer = new Framebuffer(this.handler);
448
432
  this.sceneFramebuffer.init();
@@ -477,7 +461,7 @@ class Renderer {
477
461
  internalFormat: this._internalFormat,
478
462
  format: this._format,
479
463
  type: this._type,
480
- filter: "LINEAR"
464
+ filter: "NEAREST"
481
465
  }).init();
482
466
 
483
467
  this.toneMappingFramebuffer = new Framebuffer(this.handler, {
@@ -495,8 +479,8 @@ class Renderer {
495
479
  }
496
480
 
497
481
  this.handler.onCanvasResize = () => {
482
+ this.resize();
498
483
  this.events.dispatch(this.events.resize, this.handler.canvas);
499
- this._resize();
500
484
  };
501
485
 
502
486
  this._screenFrameCornersBuffer = this.handler.createArrayBuffer(
@@ -523,24 +507,22 @@ class Renderer {
523
507
  }
524
508
  }
525
509
 
526
- _resize() {
527
- let obj = this.handler.canvas;
528
- this.activeCamera.setAspectRatio(obj.clientWidth / obj.clientHeight);
529
- this.sceneFramebuffer.setSize(
530
- obj.clientWidth * this._screenScale,
531
- obj.clientHeight * this._screenScale
532
- );
510
+ resize() {
511
+ let c = this.handler.canvas;
512
+ this.activeCamera.setAspectRatio(c.width / c.height);
513
+ this.sceneFramebuffer.setSize(c.width, c.height);
514
+
533
515
  this.blitFramebuffer &&
534
- this.blitFramebuffer.setSize(
535
- obj.clientWidth * this._screenScale,
536
- obj.clientHeight * this._screenScale,
537
- true
538
- );
516
+ this.blitFramebuffer.setSize(c.width, c.height, true);
517
+
539
518
  this.toneMappingFramebuffer &&
540
- this.toneMappingFramebuffer.setSize(obj.clientWidth, obj.clientHeight, true);
541
- this.depthFramebuffer && this.depthFramebuffer.setSize(obj.clientWidth, obj.clientHeight, true);
519
+ this.toneMappingFramebuffer.setSize(c.width, c.height, true);
520
+
521
+ this.depthFramebuffer &&
522
+ this.depthFramebuffer.setSize(c.clientWidth, c.clientHeight, true);
523
+
542
524
  this.screenDepthFramebuffer &&
543
- this.screenDepthFramebuffer.setSize(obj.clientWidth, obj.clientHeight, true);
525
+ this.screenDepthFramebuffer.setSize(c.clientWidth, c.clientHeight, true);
544
526
 
545
527
  if (this.handler.gl.type === "webgl") {
546
528
  this.screenTexture.screen = this.sceneFramebuffer.textures[0];
@@ -610,7 +592,11 @@ class Renderer {
610
592
 
611
593
  getMaxMSAA(internalFormat) {
612
594
  var gl = this.handler.gl;
613
- let samples = gl.getInternalformatParameter(gl.RENDERBUFFER, gl[internalFormat], gl.SAMPLES);
595
+ let samples = gl.getInternalformatParameter(
596
+ gl.RENDERBUFFER,
597
+ gl[internalFormat],
598
+ gl.SAMPLES
599
+ );
614
600
  return samples[0];
615
601
  }
616
602
 
@@ -671,6 +657,12 @@ class Renderer {
671
657
  ec[i]._fadingOpacity && ec[i].labelHandler.draw();
672
658
  }
673
659
 
660
+ //geoObject
661
+ i = ec.length;
662
+ while (i--) {
663
+ ec[i]._fadingOpacity && ec[i].geoObjectHandler.draw();
664
+ }
665
+
674
666
  // rays
675
667
  i = ec.length;
676
668
  while (i--) {
@@ -735,7 +727,12 @@ class Renderer {
735
727
 
736
728
  let h = this.handler;
737
729
 
738
- h.gl.clearColor(this.backgroundColor.x, this.backgroundColor.y, this.backgroundColor.z, 1.0);
730
+ h.gl.clearColor(
731
+ this.backgroundColor.x,
732
+ this.backgroundColor.y,
733
+ this.backgroundColor.z,
734
+ 1.0
735
+ );
739
736
  h.gl.clear(h.gl.COLOR_BUFFER_BIT | h.gl.DEPTH_BUFFER_BIT);
740
737
 
741
738
  e.dispatch(e.draw, this);
@@ -745,6 +742,8 @@ class Renderer {
745
742
 
746
743
  let frustums = this.activeCamera.frustums;
747
744
 
745
+ let anyEvent = this.events.mouseState.anyEvent();
746
+
748
747
  // Rendering scene nodes and entityCollections
749
748
  let rn = this._renderNodesArr;
750
749
  let k = frustums.length;
@@ -757,17 +756,19 @@ class Renderer {
757
756
  }
758
757
  this._drawEntityCollections();
759
758
 
760
- this._drawDepthBuffer(k);
761
-
762
- // Rendering picking callbacks and refresh pickingColor
763
- this._drawPickingBuffer(k);
759
+ if (anyEvent) {
760
+ this._drawPickingBuffer(k);
761
+ }
764
762
  }
765
763
 
766
764
  sfb.deactivate();
767
765
 
768
766
  this.blitFramebuffer && sfb.blitTo(this.blitFramebuffer);
769
767
 
770
- if (e.mouseState.anyEvent()) {
768
+ if (anyEvent) {
769
+ // It works ONLY for 0 (closest) frustum
770
+ this._drawDepthBuffer();
771
+
771
772
  this._readPickingColor();
772
773
  }
773
774
 
@@ -838,99 +839,81 @@ class Renderer {
838
839
  gl.enable(gl.DEPTH_TEST);
839
840
  }
840
841
 
841
- /**
842
- * Returns picking object by screen coordinates
843
- * @param {number} x - X position
844
- * @param {number} y - Y position
845
- * @return {Object} -
846
- */
847
- getPickingObject(x, y) {
848
- let cnv = this.renderer.handler.canvas,
849
- c = new Uint8Array(3);
850
- this.readPixels(c, x / cnv.width, (cnv.height - y) / cnv.height, 1);
851
- return this.colorObjects[c[0] + "_" + c[1] + "_" + c[2]];
852
- }
853
-
854
842
  /**
855
843
  * Draw picking objects framebuffer.
856
844
  * @private
857
845
  */
858
846
  _drawPickingBuffer(frustumIndex) {
859
- if (this.events.mouseState.anyEvent()) {
860
- this.pickingFramebuffer.activate();
861
-
862
- var h = this.handler;
863
- var gl = h.gl;
847
+ this.pickingFramebuffer.activate();
864
848
 
865
- if (frustumIndex === this.activeCamera.FARTHEST_FRUSTUM_INDEX) {
866
- gl.clearColor(0.0, 0.0, 0.0, 1.0);
867
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
868
- } else {
869
- gl.clear(gl.DEPTH_BUFFER_BIT);
870
- }
849
+ var h = this.handler;
850
+ var gl = h.gl;
871
851
 
872
- gl.disable(h.gl.BLEND);
852
+ if (frustumIndex === this.activeCamera.FARTHEST_FRUSTUM_INDEX) {
853
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
854
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
855
+ } else {
856
+ gl.clear(gl.DEPTH_BUFFER_BIT);
857
+ }
873
858
 
874
- var dp = this._pickingCallbacks;
875
- var i = dp.length;
876
- while (i--) {
877
- /**
878
- * This callback renders picking frame.
879
- * @callback og.Renderer~pickingCallback
880
- */
881
- dp[i].callback.call(dp[i].sender);
882
- }
859
+ gl.disable(h.gl.BLEND);
883
860
 
884
- this.pickingFramebuffer.deactivate();
861
+ var dp = this._pickingCallbacks;
862
+ var i = dp.length;
863
+ while (i--) {
864
+ /**
865
+ * This callback renders picking frame.
866
+ * @callback og.Renderer~pickingCallback
867
+ */
868
+ dp[i].callback.call(dp[i].sender);
885
869
  }
886
- }
887
870
 
888
- _drawDepthBuffer(frustumIndex) {
889
- if (frustumIndex === 0) {
890
- this.depthFramebuffer.activate();
871
+ this.pickingFramebuffer.deactivate();
872
+ }
891
873
 
892
- var h = this.handler;
893
- var gl = h.gl;
874
+ _drawDepthBuffer() {
875
+ this.depthFramebuffer.activate();
894
876
 
895
- gl.clearColor(0.0, 0.0, 0.0, 1.0);
896
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
877
+ var h = this.handler;
878
+ var gl = h.gl;
897
879
 
898
- gl.enable(gl.DEPTH_TEST);
880
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
881
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
899
882
 
900
- var dp = this._depthCallbacks;
901
- var i = dp.length;
902
- while (i--) {
903
- /**
904
- * This callback renders depth frame.
905
- * @callback og.Renderer~depthCallback
906
- */
907
- dp[i].callback.call(dp[i].sender);
908
- }
883
+ gl.enable(gl.DEPTH_TEST);
909
884
 
910
- this.depthFramebuffer.deactivate();
885
+ var dp = this._depthCallbacks;
886
+ var i = dp.length;
887
+ while (i--) {
888
+ /**
889
+ * This callback renders depth frame.
890
+ * @callback og.Renderer~depthCallback
891
+ */
892
+ dp[i].callback.call(dp[i].sender);
893
+ }
911
894
 
912
- //
913
- // PASS to depth visualization
914
- var sh = h.programs.depth,
915
- p = sh._program;
895
+ this.depthFramebuffer.deactivate();
916
896
 
917
- gl = h.gl;
897
+ //
898
+ // PASS to depth visualization
899
+ this.screenDepthFramebuffer.activate();
900
+ var sh = h.programs.depth,
901
+ p = sh._program;
918
902
 
919
- gl.bindBuffer(gl.ARRAY_BUFFER, this._screenFrameCornersBuffer);
920
- gl.vertexAttribPointer(p.attributes.corners, 2, gl.FLOAT, false, 0, 0);
903
+ gl = h.gl;
921
904
 
922
- this.screenDepthFramebuffer.activate();
905
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._screenFrameCornersBuffer);
906
+ gl.vertexAttribPointer(p.attributes.corners, 2, gl.FLOAT, false, 0, 0);
923
907
 
924
- sh.activate();
908
+ sh.activate();
925
909
 
926
- gl.activeTexture(gl.TEXTURE1);
927
- gl.bindTexture(gl.TEXTURE_2D, this.depthFramebuffer.textures[1]);
928
- gl.uniform1i(p.uniforms.depthTexture, 1);
910
+ gl.activeTexture(gl.TEXTURE0);
911
+ gl.bindTexture(gl.TEXTURE_2D, this.depthFramebuffer.textures[1]);
912
+ gl.uniform1i(p.uniforms.depthTexture, 0);
929
913
 
930
- gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
914
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
931
915
 
932
- this.screenDepthFramebuffer.deactivate();
933
- }
916
+ this.screenDepthFramebuffer.deactivate();
934
917
  }
935
918
 
936
919
  _readPickingColor() {
@@ -944,15 +927,13 @@ class Renderer {
944
927
 
945
928
  var pc = this._currPickingColor;
946
929
  if (ts.x || ts.y) {
930
+ this.pickingFramebuffer.activate();
947
931
  this.pickingFramebuffer.readPixels(pc, ts.nx, 1.0 - ts.ny);
948
- if (!(pc[0] || pc[1] || pc[2])) {
949
- this.readPixels(pc, ts.nx, 1.0 - ts.ny, 1);
950
- }
932
+ this.pickingFramebuffer.deactivate();
951
933
  } else {
934
+ this.pickingFramebuffer.activate();
952
935
  this.pickingFramebuffer.readPixels(pc, ms.nx, 1.0 - ms.ny);
953
- if (!(pc[0] || pc[1] || pc[2])) {
954
- this.readPixels(pc, ms.nx, 1.0 - ms.ny, 1);
955
- }
936
+ this.pickingFramebuffer.deactivate();
956
937
  }
957
938
  }
958
939
  }
@@ -964,7 +945,6 @@ class Renderer {
964
945
  start() {
965
946
  this.handler.start();
966
947
  }
967
-
968
948
  }
969
949
 
970
950
  export { Renderer };