@openglobus/og 0.11.6 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/css/og.css +5 -2
  2. package/package.json +12 -12
  3. package/src/og/Globe.js +25 -10
  4. package/src/og/Popup.js +3 -2
  5. package/src/og/camera/Camera.js +70 -79
  6. package/src/og/camera/PlanetCamera.js +33 -33
  7. package/src/og/control/DebugInfo.js +2 -2
  8. package/src/og/control/EarthNavigation.js +26 -17
  9. package/src/og/control/Lighting.js +74 -64
  10. package/src/og/control/MouseNavigation.js +30 -29
  11. package/src/og/control/MouseWheelZoomControl.js +257 -0
  12. package/src/og/control/Sun.js +3 -3
  13. package/src/og/control/index.js +2 -0
  14. package/src/og/control/visibleExtent/Segment.js +1862 -0
  15. package/src/og/control/visibleExtent/VisibleExtent.js +80 -0
  16. package/src/og/control/visibleExtent/drawnode.js +751 -0
  17. package/src/og/ellipsoid/Ellipsoid.js +1 -1
  18. package/src/og/entity/BaseBillboard.js +67 -76
  19. package/src/og/entity/BillboardHandler.js +15 -8
  20. package/src/og/entity/Entity.js +742 -742
  21. package/src/og/entity/GeoObjectHandler.js +102 -117
  22. package/src/og/entity/Label.js +45 -48
  23. package/src/og/entity/LabelHandler.js +24 -23
  24. package/src/og/entity/LabelWorker.js +21 -16
  25. package/src/og/layer/CanvasTiles.js +8 -12
  26. package/src/og/layer/GeoImage.js +2 -10
  27. package/src/og/layer/GeoTexture2d.js +2 -10
  28. package/src/og/layer/GeoVideo.js +2 -10
  29. package/src/og/layer/Layer.js +23 -32
  30. package/src/og/layer/Material.js +1 -1
  31. package/src/og/layer/WMS.js +0 -2
  32. package/src/og/layer/XYZ.js +31 -33
  33. package/src/og/math/Vec3.js +18 -2
  34. package/src/og/quadTree/Node.js +52 -111
  35. package/src/og/quadTree/quadTree.js +1 -1
  36. package/src/og/renderer/Renderer.js +85 -122
  37. package/src/og/renderer/RendererEvents.js +44 -22
  38. package/src/og/scene/Planet.js +179 -198
  39. package/src/og/segment/Segment.js +99 -268
  40. package/src/og/segment/Slice.js +45 -0
  41. package/src/og/shaders/drawnode.js +174 -360
  42. package/src/og/shaders/toneMapping.js +1 -0
  43. package/src/og/shapes/BaseShape.js +1 -1
  44. package/src/og/terrain/EmptyTerrain.js +3 -2
  45. package/src/og/terrain/GlobusTerrain.js +2 -0
  46. package/src/og/utils/FontAtlas.js +6 -2
  47. package/src/og/utils/GeoImageCreator.js +5 -1
  48. package/src/og/utils/Loader.js +1 -1
  49. package/src/og/utils/PlainSegmentWorker.js +0 -13
  50. package/src/og/utils/TextureAtlas.js +2 -2
  51. package/src/og/utils/VectorTileCreator.js +1 -3
  52. package/src/og/utils/shared.js +1 -1
  53. package/src/og/webgl/Handler.js +156 -118
  54. package/types/Clock.d.ts +0 -94
  55. package/types/Deferred.d.ts +0 -6
  56. package/types/Events.d.ts +0 -77
  57. package/types/Extent.d.ts +0 -166
  58. package/types/Globe.d.ts +0 -82
  59. package/types/ImageCanvas.d.ts +0 -123
  60. package/types/Lock.d.ts +0 -12
  61. package/types/LonLat.d.ts +0 -108
  62. package/types/Popup.d.ts +0 -42
  63. package/types/QueueArray.d.ts +0 -19
  64. package/types/Rectangle.d.ts +0 -80
  65. package/types/Stack.d.ts +0 -19
  66. package/types/ajax.d.ts +0 -24
  67. package/types/arial.d.ts +0 -48
  68. package/types/astro/astro.d.ts +0 -38
  69. package/types/astro/earth.d.ts +0 -7
  70. package/types/astro/jd.d.ts +0 -254
  71. package/types/bv/Box.d.ts +0 -30
  72. package/types/bv/Sphere.d.ts +0 -38
  73. package/types/bv/index.d.ts +0 -3
  74. package/types/camera/Camera.d.ts +0 -312
  75. package/types/camera/Frustum.d.ts +0 -133
  76. package/types/camera/PlanetCamera.d.ts +0 -218
  77. package/types/camera/index.d.ts +0 -3
  78. package/types/cons.d.ts +0 -40
  79. package/types/control/CompassButton.d.ts +0 -17
  80. package/types/control/Control.d.ts +0 -104
  81. package/types/control/DebugInfo.d.ts +0 -15
  82. package/types/control/EarthCoordinates.d.ts +0 -47
  83. package/types/control/EarthNavigation.d.ts +0 -42
  84. package/types/control/GeoImageDragControl.d.ts +0 -6
  85. package/types/control/KeyboardNavigation.d.ts +0 -21
  86. package/types/control/LayerSwitcher.d.ts +0 -21
  87. package/types/control/Lighting.d.ts +0 -16
  88. package/types/control/MouseNavigation.d.ts +0 -47
  89. package/types/control/ScaleControl.d.ts +0 -22
  90. package/types/control/ShowFps.d.ts +0 -11
  91. package/types/control/SimpleNavigation.d.ts +0 -25
  92. package/types/control/Sun.d.ts +0 -50
  93. package/types/control/ToggleWireframe.d.ts +0 -12
  94. package/types/control/TouchNavigation.d.ts +0 -48
  95. package/types/control/ZoomControl.d.ts +0 -27
  96. package/types/control/index.d.ts +0 -17
  97. package/types/ellipsoid/Ellipsoid.d.ts +0 -146
  98. package/types/ellipsoid/index.d.ts +0 -3
  99. package/types/ellipsoid/wgs84.d.ts +0 -6
  100. package/types/entity/BaseBillboard.d.ts +0 -215
  101. package/types/entity/Billboard.d.ts +0 -94
  102. package/types/entity/BillboardHandler.d.ts +0 -78
  103. package/types/entity/Entity.d.ts +0 -348
  104. package/types/entity/EntityCollection.d.ts +0 -317
  105. package/types/entity/GeoObject.d.ts +0 -111
  106. package/types/entity/GeoObjectHandler.d.ts +0 -77
  107. package/types/entity/Geometry.d.ts +0 -74
  108. package/types/entity/GeometryHandler.d.ts +0 -76
  109. package/types/entity/Label.d.ts +0 -189
  110. package/types/entity/LabelHandler.d.ts +0 -31
  111. package/types/entity/LabelWorker.d.ts +0 -9
  112. package/types/entity/PointCloud.d.ts +0 -174
  113. package/types/entity/PointCloudHandler.d.ts +0 -38
  114. package/types/entity/Polyline.d.ts +0 -306
  115. package/types/entity/PolylineHandler.d.ts +0 -18
  116. package/types/entity/Ray.d.ts +0 -124
  117. package/types/entity/RayHandler.d.ts +0 -67
  118. package/types/entity/ShapeHandler.d.ts +0 -22
  119. package/types/entity/Strip.d.ts +0 -119
  120. package/types/entity/StripHandler.d.ts +0 -38
  121. package/types/entity/index.d.ts +0 -8
  122. package/types/index.core.d.ts +0 -65
  123. package/types/index.d.ts +0 -45
  124. package/types/index.webgl.d.ts +0 -7
  125. package/types/input/KeyboardHandler.d.ts +0 -10
  126. package/types/input/MouseHandler.d.ts +0 -5
  127. package/types/input/TouchHandler.d.ts +0 -5
  128. package/types/input/input.d.ts +0 -34
  129. package/types/layer/BaseGeoImage.d.ts +0 -94
  130. package/types/layer/CanvasTiles.d.ts +0 -68
  131. package/types/layer/GeoImage.d.ts +0 -52
  132. package/types/layer/GeoTexture2d.d.ts +0 -8
  133. package/types/layer/GeoVideo.d.ts +0 -55
  134. package/types/layer/KML.d.ts +0 -63
  135. package/types/layer/Layer.d.ts +0 -326
  136. package/types/layer/Material.d.ts +0 -45
  137. package/types/layer/Vector.d.ts +0 -208
  138. package/types/layer/WMS.d.ts +0 -63
  139. package/types/layer/XYZ.d.ts +0 -120
  140. package/types/layer/index.d.ts +0 -10
  141. package/types/light/LightSource.d.ts +0 -178
  142. package/types/math/Line2.d.ts +0 -11
  143. package/types/math/Line3.d.ts +0 -10
  144. package/types/math/Mat3.d.ts +0 -65
  145. package/types/math/Mat4.d.ts +0 -176
  146. package/types/math/Plane.d.ts +0 -18
  147. package/types/math/Quat.d.ts +0 -379
  148. package/types/math/Ray.d.ts +0 -82
  149. package/types/math/Vec2.d.ts +0 -309
  150. package/types/math/Vec3.d.ts +0 -460
  151. package/types/math/Vec4.d.ts +0 -162
  152. package/types/math/coder.d.ts +0 -43
  153. package/types/math/index.d.ts +0 -11
  154. package/types/math.d.ts +0 -261
  155. package/types/mercator.d.ts +0 -92
  156. package/types/proj/EPSG3857.d.ts +0 -6
  157. package/types/proj/EPSG4326.d.ts +0 -6
  158. package/types/proj/Proj.d.ts +0 -42
  159. package/types/quadTree/EntityCollectionNode.d.ts +0 -34
  160. package/types/quadTree/Node.d.ts +0 -61
  161. package/types/quadTree/quadTree.d.ts +0 -40
  162. package/types/renderer/Renderer.d.ts +0 -300
  163. package/types/renderer/RendererEvents.d.ts +0 -233
  164. package/types/res/images.d.ts +0 -3
  165. package/types/scene/Axes.d.ts +0 -11
  166. package/types/scene/BaseNode.d.ts +0 -60
  167. package/types/scene/Planet.d.ts +0 -577
  168. package/types/scene/RenderNode.d.ts +0 -142
  169. package/types/scene/SkyBox.d.ts +0 -10
  170. package/types/scene/index.d.ts +0 -4
  171. package/types/segment/Segment.d.ts +0 -279
  172. package/types/segment/SegmentLonLat.d.ts +0 -16
  173. package/types/segment/segmentHelper.d.ts +0 -13
  174. package/types/shaders/billboard.d.ts +0 -3
  175. package/types/shaders/depth.d.ts +0 -2
  176. package/types/shaders/drawnode.d.ts +0 -7
  177. package/types/shaders/geoObject.d.ts +0 -3
  178. package/types/shaders/label.d.ts +0 -4
  179. package/types/shaders/pointCloud.d.ts +0 -2
  180. package/types/shaders/polyline.d.ts +0 -3
  181. package/types/shaders/ray.d.ts +0 -2
  182. package/types/shaders/screenFrame.d.ts +0 -2
  183. package/types/shaders/shape.d.ts +0 -4
  184. package/types/shaders/skybox.d.ts +0 -2
  185. package/types/shaders/toneMapping.d.ts +0 -2
  186. package/types/shapes/BaseShape.d.ts +0 -250
  187. package/types/shapes/Sphere.d.ts +0 -41
  188. package/types/terrain/BilTerrain.d.ts +0 -7
  189. package/types/terrain/EmptyTerrain.d.ts +0 -72
  190. package/types/terrain/Geoid.d.ts +0 -26
  191. package/types/terrain/GlobusTerrain.d.ts +0 -116
  192. package/types/terrain/MapboxTerrain.d.ts +0 -7
  193. package/types/terrain/index.d.ts +0 -5
  194. package/types/utils/FontAtlas.d.ts +0 -14
  195. package/types/utils/GeoImageCreator.d.ts +0 -30
  196. package/types/utils/ImagesCacheManager.d.ts +0 -10
  197. package/types/utils/Loader.d.ts +0 -25
  198. package/types/utils/NormalMapCreator.d.ts +0 -39
  199. package/types/utils/PlainSegmentWorker.d.ts +0 -10
  200. package/types/utils/TerrainWorker.d.ts +0 -9
  201. package/types/utils/TextureAtlas.d.ts +0 -111
  202. package/types/utils/VectorTileCreator.d.ts +0 -16
  203. package/types/utils/colorTable.d.ts +0 -143
  204. package/types/utils/earcut.d.ts +0 -6
  205. package/types/utils/shared.d.ts +0 -231
  206. package/types/webgl/Framebuffer.d.ts +0 -135
  207. package/types/webgl/Handler.d.ts +0 -397
  208. package/types/webgl/Multisample.d.ts +0 -89
  209. package/types/webgl/Program.d.ts +0 -161
  210. package/types/webgl/ProgramController.d.ts +0 -89
  211. package/types/webgl/callbacks.d.ts +0 -1
  212. package/types/webgl/index.d.ts +0 -6
  213. 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
 
@@ -64,8 +61,10 @@ let BOUNDS = {
64
61
  * @param {Extent} extent - Planet segment extent.
65
62
  */
66
63
  class Node {
64
+
67
65
  constructor(SegmentPrototype, planet, partId, parent, id, tileZoom, extent) {
68
66
  this.SegmentPrototype = SegmentPrototype;
67
+ planet._createdNodesCount++;
69
68
  this.planet = planet;
70
69
  this.parentNode = parent;
71
70
  this.partId = partId;
@@ -83,7 +82,6 @@ class Node {
83
82
  this._cameraInside = false;
84
83
  this.inFrustum = 0;
85
84
  this.createBounds();
86
- this.planet._createdNodesCount++;
87
85
  }
88
86
 
89
87
  createChildrenNodes() {
@@ -101,45 +99,10 @@ class Node {
101
99
  var c = new LonLat(sw.lon + size_x, sw.lat + size_y);
102
100
  var nd = this.nodes;
103
101
 
104
- nd[NW] = new Node(
105
- this.SegmentPrototype,
106
- p,
107
- NW,
108
- this,
109
- id,
110
- z,
111
- new Extent(new LonLat(sw.lon, sw.lat + size_y), new LonLat(sw.lon + size_x, ne.lat))
112
- );
113
-
114
- nd[NE] = new Node(
115
- this.SegmentPrototype,
116
- p,
117
- NE,
118
- this,
119
- id,
120
- z,
121
- new Extent(c, new LonLat(ne.lon, ne.lat))
122
- );
123
-
124
- nd[SW] = new Node(
125
- this.SegmentPrototype,
126
- p,
127
- SW,
128
- this,
129
- id,
130
- z,
131
- new Extent(new LonLat(sw.lon, sw.lat), c)
132
- );
133
-
134
- nd[SE] = new Node(
135
- this.SegmentPrototype,
136
- p,
137
- SE,
138
- this,
139
- id,
140
- z,
141
- new Extent(new LonLat(sw.lon + size_x, sw.lat), new LonLat(ne.lon, sw.lat + size_y))
142
- );
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)));
143
106
  }
144
107
 
145
108
  createBounds() {
@@ -152,6 +115,15 @@ class Node {
152
115
  } else {
153
116
  seg.createBoundsByParent();
154
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;
155
127
  }
156
128
 
157
129
  getState() {
@@ -203,15 +175,10 @@ class Node {
203
175
  }
204
176
 
205
177
  renderTree(cam, maxZoom, terrainReadySegment, stopLoading) {
206
- if (
207
- this.planet._renderedNodes.length >= MAX_RENDERED_NODES ||
208
- this.planet._nodeCounterError_ > 2000
209
- ) {
178
+ if (this.planet._renderedNodes.length >= MAX_RENDERED_NODES) {
210
179
  return;
211
180
  }
212
181
 
213
- this.planet._nodeCounterError_++;
214
-
215
182
  this.state = WALKTHROUGH;
216
183
 
217
184
  this.neighbors[0] = null;
@@ -281,39 +248,49 @@ class Node {
281
248
  if (this.inFrustum || this._cameraInside || seg.tileZoom < 3) {
282
249
  let h = cam._lonLat.height;
283
250
 
284
- let altVis =
285
- cam.eye.distance(seg.bsphere.center) - seg.bsphere.radius <
286
- 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 ||
287
255
  (seg.tileZoom < 4 && !seg.terrainReady) ||
288
256
  seg.tileZoom < 2;
289
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
+
290
267
  if ((this.inFrustum && (altVis || h > 10000.0)) || this._cameraInside) {
291
268
  seg._collectVisibleNodes();
292
269
  }
293
270
 
294
271
  if (seg.tileZoom < 2 && seg.normalMapReady) {
295
272
  this.traverseNodes(cam, maxZoom, terrainReadySegment, stopLoading);
296
- } else if ((!maxZoom && seg.acceptForRendering(cam)) || seg.tileZoom === maxZoom) {
297
- this.prepareForRendering(
298
- cam,
299
- altVis,
300
- this.inFrustum,
301
- terrainReadySegment,
302
- stopLoading
303
- );
304
- } else if (seg.tileZoom < planet.terrain._maxNodeZoom && seg.terrainReady) {
305
- // Deleting terrainReady here, you have to remove
306
- // this.appliedTerrainNodeId !== pn.nodeId in whileTerrainLoading,
307
- // 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.passReady = 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)) {
308
288
  this.traverseNodes(cam, maxZoom, seg, stopLoading);
289
+ } else if (altVis) {
290
+ seg.passReady = maxZoom ? seg.terrainReady : false;
291
+ this.renderNode(this.inFrustum, !this.inFrustum, terrainReadySegment, stopLoading);
309
292
  } else {
310
- this.prepareForRendering(
311
- cam,
312
- altVis,
313
- this.inFrustum,
314
- terrainReadySegment,
315
- stopLoading
316
- );
293
+ this.state = NOTRENDERING;
317
294
  }
318
295
  } else {
319
296
  this.state = NOTRENDERING;
@@ -333,33 +310,6 @@ class Node {
333
310
  n[3].renderTree(cam, maxZoom, terrainReadySegment, stopLoading);
334
311
  }
335
312
 
336
- prepareForRendering(cam, altVis, inFrustum, terrainReadySegment, stopLoading) {
337
- let seg = this.segment;
338
-
339
- if (cam._lonLat.height < VISIBLE_HEIGHT) {
340
- if (altVis) {
341
- this.renderNode(inFrustum, !inFrustum, terrainReadySegment, stopLoading);
342
- } else {
343
- this.state = NOTRENDERING;
344
- }
345
- } else {
346
- if (seg.tileZoom < 2) {
347
- this.renderNode(inFrustum, !inFrustum, terrainReadySegment, stopLoading);
348
- } else if (seg.tileZoom > MAX_NORMAL_ZOOM) {
349
- this.renderNode(inFrustum, !inFrustum, terrainReadySegment, stopLoading);
350
- } else if (
351
- seg._swNorm.dot(cam._n) > 0.0 ||
352
- seg._nwNorm.dot(cam._n) > 0.0 ||
353
- seg._neNorm.dot(cam._n) > 0.0 ||
354
- seg._seNorm.dot(cam._n) > 0.0
355
- ) {
356
- this.renderNode(inFrustum, !inFrustum, terrainReadySegment, stopLoading);
357
- } else {
358
- this.state = NOTRENDERING;
359
- }
360
- }
361
- }
362
-
363
313
  renderNode(inFrustum, onlyTerrain, terrainReadySegment, stopLoading) {
364
314
  var seg = this.segment;
365
315
 
@@ -381,7 +331,7 @@ class Node {
381
331
  }
382
332
 
383
333
  // Create normal map texture
384
- if (seg.planet.lightEnabled && !seg.normalMapReady /* && !seg.parentNormalMapReady*/) {
334
+ if (seg.planet.lightEnabled && !seg.normalMapReady /*&& !seg.parentNormalMapReady*/) {
385
335
  this.whileNormalMapCreating();
386
336
  }
387
337
 
@@ -774,16 +724,8 @@ class Node {
774
724
  let v_lt = new Vec3(bigOne[0], bigOne[1], bigOne[2]),
775
725
  v_rb = new Vec3(bigOne[9], bigOne[10], bigOne[11]);
776
726
 
777
- let vn = new Vec3(
778
- bigOne[3] - bigOne[0],
779
- bigOne[4] - bigOne[1],
780
- bigOne[5] - bigOne[2]
781
- ),
782
- vw = new Vec3(
783
- bigOne[6] - bigOne[0],
784
- bigOne[7] - bigOne[1],
785
- bigOne[8] - bigOne[2]
786
- ),
727
+ let vn = new Vec3(bigOne[3] - bigOne[0], bigOne[4] - bigOne[1], bigOne[5] - bigOne[2]),
728
+ vw = new Vec3(bigOne[6] - bigOne[0], bigOne[7] - bigOne[1], bigOne[8] - bigOne[2]),
787
729
  ve = new Vec3(
788
730
  bigOne[3] - bigOne[9],
789
731
  bigOne[4] - bigOne[10],
@@ -996,8 +938,7 @@ class Node {
996
938
  offset = 0;
997
939
 
998
940
  while (pNode.segment.tileZoom > neighbourZoom) {
999
- offset +=
1000
- PARTOFFSET[pNode.partId][side] / (1 << (pNode.segment.tileZoom - neighbourZoom));
941
+ offset += PARTOFFSET[pNode.partId][side] / (1 << (pNode.segment.tileZoom - neighbourZoom));
1001
942
  pNode = pNode.parentNode;
1002
943
  }
1003
944
 
@@ -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;
@@ -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;
@@ -224,11 +221,6 @@ class Renderer {
224
221
  this.events.active = activity;
225
222
  }
226
223
 
227
- setScreenScale(scale) {
228
- this._screenScale = scale;
229
- this._resize();
230
- }
231
-
232
224
  addDepthCallback(sender, callback) {
233
225
  var id = __depthCallbackCounter__++;
234
226
  this._depthCallbacks.push({
@@ -333,7 +325,7 @@ class Renderer {
333
325
  * @returns {number} -
334
326
  */
335
327
  getWidth() {
336
- return this.handler.canvas.width;
328
+ return this.handler.canvas.clientWidth;
337
329
  }
338
330
 
339
331
  /**
@@ -342,7 +334,7 @@ class Renderer {
342
334
  * @returns {number} -
343
335
  */
344
336
  getHeight() {
345
- return this.handler.canvas.height;
337
+ return this.handler.canvas.clientHeight;
346
338
  }
347
339
 
348
340
  /**
@@ -352,7 +344,7 @@ class Renderer {
352
344
  */
353
345
  getCenter() {
354
346
  var cnv = this.handler.canvas;
355
- 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));
356
348
  }
357
349
 
358
350
  /**
@@ -431,20 +423,10 @@ class Renderer {
431
423
  useDepth: false
432
424
  }).init();
433
425
 
434
- //this.depthFramebuffer = new Framebuffer(this.handler, {
435
- // size: 2,
436
- // internalFormat: ["RGBA", "RGBA"],
437
- // format: ["RGBA", "RGBA"],
438
- // type: ["UNSIGNED_BYTE", "UNSIGNED_BYTE"],
439
- // attachment: ["COLOR_ATTACHMENT", "COLOR_ATTACHMENT"],
440
- // useDepth: true
441
- //}).init();
442
426
  this.screenDepthFramebuffer = new Framebuffer(this.handler, {
443
427
  useDepth: false
444
428
  }).init();
445
429
 
446
- this.readPixels = () => {};
447
-
448
430
  if (this.handler.gl.type === "webgl") {
449
431
  this.sceneFramebuffer = new Framebuffer(this.handler);
450
432
  this.sceneFramebuffer.init();
@@ -479,7 +461,7 @@ class Renderer {
479
461
  internalFormat: this._internalFormat,
480
462
  format: this._format,
481
463
  type: this._type,
482
- filter: "LINEAR"
464
+ filter: "NEAREST"
483
465
  }).init();
484
466
 
485
467
  this.toneMappingFramebuffer = new Framebuffer(this.handler, {
@@ -497,8 +479,8 @@ class Renderer {
497
479
  }
498
480
 
499
481
  this.handler.onCanvasResize = () => {
482
+ this.resize();
500
483
  this.events.dispatch(this.events.resize, this.handler.canvas);
501
- this._resize();
502
484
  };
503
485
 
504
486
  this._screenFrameCornersBuffer = this.handler.createArrayBuffer(
@@ -525,25 +507,22 @@ class Renderer {
525
507
  }
526
508
  }
527
509
 
528
- _resize() {
529
- let obj = this.handler.canvas;
530
- this.activeCamera.setAspectRatio(obj.clientWidth / obj.clientHeight);
531
- this.sceneFramebuffer.setSize(
532
- obj.clientWidth * this._screenScale,
533
- obj.clientHeight * this._screenScale
534
- );
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
+
535
515
  this.blitFramebuffer &&
536
- this.blitFramebuffer.setSize(
537
- obj.clientWidth * this._screenScale,
538
- obj.clientHeight * this._screenScale,
539
- true
540
- );
516
+ this.blitFramebuffer.setSize(c.width, c.height, true);
517
+
541
518
  this.toneMappingFramebuffer &&
542
- this.toneMappingFramebuffer.setSize(obj.clientWidth, obj.clientHeight, true);
519
+ this.toneMappingFramebuffer.setSize(c.width, c.height, true);
520
+
543
521
  this.depthFramebuffer &&
544
- this.depthFramebuffer.setSize(obj.clientWidth, obj.clientHeight, true);
522
+ this.depthFramebuffer.setSize(c.clientWidth, c.clientHeight, true);
523
+
545
524
  this.screenDepthFramebuffer &&
546
- this.screenDepthFramebuffer.setSize(obj.clientWidth, obj.clientHeight, true);
525
+ this.screenDepthFramebuffer.setSize(c.clientWidth, c.clientHeight, true);
547
526
 
548
527
  if (this.handler.gl.type === "webgl") {
549
528
  this.screenTexture.screen = this.sceneFramebuffer.textures[0];
@@ -763,6 +742,8 @@ class Renderer {
763
742
 
764
743
  let frustums = this.activeCamera.frustums;
765
744
 
745
+ let anyEvent = this.events.mouseState.anyEvent();
746
+
766
747
  // Rendering scene nodes and entityCollections
767
748
  let rn = this._renderNodesArr;
768
749
  let k = frustums.length;
@@ -775,17 +756,19 @@ class Renderer {
775
756
  }
776
757
  this._drawEntityCollections();
777
758
 
778
- this._drawDepthBuffer(k);
779
-
780
- // Rendering picking callbacks and refresh pickingColor
781
- this._drawPickingBuffer(k);
759
+ if (anyEvent) {
760
+ this._drawPickingBuffer(k);
761
+ }
782
762
  }
783
763
 
784
764
  sfb.deactivate();
785
765
 
786
766
  this.blitFramebuffer && sfb.blitTo(this.blitFramebuffer);
787
767
 
788
- if (e.mouseState.anyEvent()) {
768
+ if (anyEvent) {
769
+ // It works ONLY for 0 (closest) frustum
770
+ this._drawDepthBuffer();
771
+
789
772
  this._readPickingColor();
790
773
  }
791
774
 
@@ -856,99 +839,81 @@ class Renderer {
856
839
  gl.enable(gl.DEPTH_TEST);
857
840
  }
858
841
 
859
- /**
860
- * Returns picking object by screen coordinates
861
- * @param {number} x - X position
862
- * @param {number} y - Y position
863
- * @return {Object} -
864
- */
865
- getPickingObject(x, y) {
866
- let cnv = this.renderer.handler.canvas,
867
- c = new Uint8Array(3);
868
- this.readPixels(c, x / cnv.width, (cnv.height - y) / cnv.height, 1);
869
- return this.colorObjects[c[0] + "_" + c[1] + "_" + c[2]];
870
- }
871
-
872
842
  /**
873
843
  * Draw picking objects framebuffer.
874
844
  * @private
875
845
  */
876
846
  _drawPickingBuffer(frustumIndex) {
877
- if (this.events.mouseState.anyEvent()) {
878
- this.pickingFramebuffer.activate();
879
-
880
- var h = this.handler;
881
- var gl = h.gl;
847
+ this.pickingFramebuffer.activate();
882
848
 
883
- if (frustumIndex === this.activeCamera.FARTHEST_FRUSTUM_INDEX) {
884
- gl.clearColor(0.0, 0.0, 0.0, 1.0);
885
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
886
- } else {
887
- gl.clear(gl.DEPTH_BUFFER_BIT);
888
- }
849
+ var h = this.handler;
850
+ var gl = h.gl;
889
851
 
890
- 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
+ }
891
858
 
892
- var dp = this._pickingCallbacks;
893
- var i = dp.length;
894
- while (i--) {
895
- /**
896
- * This callback renders picking frame.
897
- * @callback og.Renderer~pickingCallback
898
- */
899
- dp[i].callback.call(dp[i].sender);
900
- }
859
+ gl.disable(h.gl.BLEND);
901
860
 
902
- 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);
903
869
  }
904
- }
905
870
 
906
- _drawDepthBuffer(frustumIndex) {
907
- if (frustumIndex === 0) {
908
- this.depthFramebuffer.activate();
871
+ this.pickingFramebuffer.deactivate();
872
+ }
909
873
 
910
- var h = this.handler;
911
- var gl = h.gl;
874
+ _drawDepthBuffer() {
875
+ this.depthFramebuffer.activate();
912
876
 
913
- gl.clearColor(0.0, 0.0, 0.0, 1.0);
914
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
877
+ var h = this.handler;
878
+ var gl = h.gl;
915
879
 
916
- 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);
917
882
 
918
- var dp = this._depthCallbacks;
919
- var i = dp.length;
920
- while (i--) {
921
- /**
922
- * This callback renders depth frame.
923
- * @callback og.Renderer~depthCallback
924
- */
925
- dp[i].callback.call(dp[i].sender);
926
- }
883
+ gl.enable(gl.DEPTH_TEST);
927
884
 
928
- 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
+ }
929
894
 
930
- //
931
- // PASS to depth visualization
932
- var sh = h.programs.depth,
933
- p = sh._program;
895
+ this.depthFramebuffer.deactivate();
934
896
 
935
- gl = h.gl;
897
+ //
898
+ // PASS to depth visualization
899
+ this.screenDepthFramebuffer.activate();
900
+ var sh = h.programs.depth,
901
+ p = sh._program;
936
902
 
937
- gl.bindBuffer(gl.ARRAY_BUFFER, this._screenFrameCornersBuffer);
938
- gl.vertexAttribPointer(p.attributes.corners, 2, gl.FLOAT, false, 0, 0);
903
+ gl = h.gl;
939
904
 
940
- this.screenDepthFramebuffer.activate();
905
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._screenFrameCornersBuffer);
906
+ gl.vertexAttribPointer(p.attributes.corners, 2, gl.FLOAT, false, 0, 0);
941
907
 
942
- sh.activate();
908
+ sh.activate();
943
909
 
944
- gl.activeTexture(gl.TEXTURE1);
945
- gl.bindTexture(gl.TEXTURE_2D, this.depthFramebuffer.textures[1]);
946
- 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);
947
913
 
948
- gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
914
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
949
915
 
950
- this.screenDepthFramebuffer.deactivate();
951
- }
916
+ this.screenDepthFramebuffer.deactivate();
952
917
  }
953
918
 
954
919
  _readPickingColor() {
@@ -962,15 +927,13 @@ class Renderer {
962
927
 
963
928
  var pc = this._currPickingColor;
964
929
  if (ts.x || ts.y) {
930
+ this.pickingFramebuffer.activate();
965
931
  this.pickingFramebuffer.readPixels(pc, ts.nx, 1.0 - ts.ny);
966
- if (!(pc[0] || pc[1] || pc[2])) {
967
- this.readPixels(pc, ts.nx, 1.0 - ts.ny, 1);
968
- }
932
+ this.pickingFramebuffer.deactivate();
969
933
  } else {
934
+ this.pickingFramebuffer.activate();
970
935
  this.pickingFramebuffer.readPixels(pc, ms.nx, 1.0 - ms.ny);
971
- if (!(pc[0] || pc[1] || pc[2])) {
972
- this.readPixels(pc, ms.nx, 1.0 - ms.ny, 1);
973
- }
936
+ this.pickingFramebuffer.deactivate();
974
937
  }
975
938
  }
976
939
  }