@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
@@ -84,10 +84,14 @@ class RendererEvents extends Events {
84
84
  ms.moving ||
85
85
  ms.justStopped
86
86
  );
87
- },
88
- /** Current mouse X position. */
87
+ },
88
+ /** Current screen mouse X position. */
89
+ clientX: 0,
90
+ /** Current screen mouse Y position. */
91
+ clientY: 0,
92
+ /** Current viewport mouse X position. */
89
93
  x: 0,
90
- /** Current mouse Y position. */
94
+ /** Current viewport mouse Y position. */
91
95
  y: 0,
92
96
  /** Current mouse X position from 0 to 1 */
93
97
  nx: 0,
@@ -335,7 +339,7 @@ class RendererEvents extends Events {
335
339
  */
336
340
  onMouseMove(event, sys) {
337
341
  var ms = this.mouseState;
338
- this.updateButtonsStates(sys.buttons)
342
+ this.updateButtonsStates(sys.buttons);
339
343
  ms.sys = event;
340
344
 
341
345
  let ex = event.clientX,
@@ -357,16 +361,20 @@ class RendererEvents extends Events {
357
361
  this._mClkBegins = 0;
358
362
  }
359
363
 
360
- if (ms.x === event.clientX && ms.y === event.clientY) {
364
+ if (ms.clientX === event.clientX && ms.clientY === event.clientY) {
361
365
  return;
362
- }
366
+ }
363
367
 
364
- ms.x = event.clientX;
365
- ms.y = event.clientY;
368
+ ms.clientX = event.clientX;
369
+ ms.clientY = event.clientY;
370
+
371
+ let h = this.renderer.handler;
372
+
373
+ ms.x = event.clientX * h.pixelRatio;
374
+ ms.y = event.clientY * h.pixelRatio;
366
375
 
367
- var cnv = this.renderer.handler.canvas;
368
- ms.nx = ms.x / cnv.width;
369
- ms.ny = ms.y / cnv.height;
376
+ ms.nx = ms.x / h.canvas.width;
377
+ ms.ny = ms.y / h.canvas.height;
370
378
 
371
379
  ms.moving = true;
372
380
 
@@ -492,12 +500,18 @@ class RendererEvents extends Events {
492
500
  */
493
501
  onTouchStart(event) {
494
502
  var ts = this.touchState;
495
- ts.sys = event;
496
- ts.x = event.touches.item(0).clientX - event.offsetLeft;
497
- ts.y = event.touches.item(0).clientY - event.offsetTop;
498
- var cnv = this.renderer.handler.canvas;
499
- ts.nx = ts.x / cnv.width;
500
- ts.ny = ts.y / cnv.height;
503
+ ts.sys = event;
504
+
505
+ ts.clienX = event.touches.item(0).clientX - event.offsetLeft;
506
+ ts.clientY = event.touches.item(0).clientY - event.offsetTop;
507
+
508
+ let h = this.renderer.handler;
509
+
510
+ ts.x = ts.clientX * h.pixelRatio;
511
+ ts.y = ts.clientY * h.pixelRatio;
512
+
513
+ ts.nx = ts.x / h.canvas.width;
514
+ ts.ny = ts.y / h.canvas.height;
501
515
  ts.prev_x = ts.x;
502
516
  ts.prev_y = ts.y;
503
517
  ts.touchStart = true;
@@ -551,11 +565,17 @@ class RendererEvents extends Events {
551
565
  */
552
566
  onTouchMove(event) {
553
567
  var ts = this.touchState;
554
- ts.x = event.touches.item(0).clientX - event.offsetLeft;
555
- ts.y = event.touches.item(0).clientY - event.offsetTop;
556
- var cnv = this.renderer.handler.canvas;
557
- ts.nx = ts.x / cnv.width;
558
- ts.ny = ts.y / cnv.height;
568
+ ts.clientX = event.touches.item(0).clientX - event.offsetLeft;
569
+ ts.clientY = event.touches.item(0).clientY - event.offsetTop;
570
+
571
+ var h = this.renderer.handler;
572
+
573
+ ts.x = ts.clientX * h.pixelRatio;
574
+ ts.y = ts.clientY * h.pixelRatio;
575
+
576
+ ts.nx = ts.x / h.canvas.width;
577
+ ts.ny = ts.y / h.canvas.height;
578
+
559
579
  ts.sys = event;
560
580
  ts.moving = true;
561
581
  this._dblTchBegins = 0;
@@ -808,8 +828,10 @@ class RendererEvents extends Events {
808
828
 
809
829
  if (ts.touchStart) {
810
830
  var r = this.renderer;
811
-
831
+
832
+ r.pickingFramebuffer.activate();
812
833
  r.pickingFramebuffer.readPixels(r._currPickingColor, ts.nx, 1.0 - ts.ny, 1);
834
+ r.pickingFramebuffer.deactivate();
813
835
 
814
836
  var o = r.colorObjects;
815
837
  var c = r._currPickingColor;
@@ -2,7 +2,7 @@
2
2
  * @module og/scene/BaseNode
3
3
  */
4
4
 
5
- 'use strict';
5
+ "use strict";
6
6
 
7
7
  /**
8
8
  * Scene node base class.
@@ -11,7 +11,6 @@
11
11
  */
12
12
  class BaseNode {
13
13
  constructor(name) {
14
-
15
14
  /**
16
15
  * Node name.
17
16
  * @public
@@ -111,4 +110,4 @@ class BaseNode {
111
110
  }
112
111
  }
113
112
 
114
- export { BaseNode };
113
+ export { BaseNode };
@@ -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 = 0.9;
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.
@@ -93,7 +98,7 @@ const EVENT_NAMES = [
93
98
  * @param {string} [options.name="Earth"] - Planet name(Earth by default)
94
99
  * @param {Ellipsoid} [options.ellipsoid] - Planet ellipsoid(WGS84 by default)
95
100
  * @param {Number} [options.maxGridSize=128] - Segment maximal grid size
96
- * @param {Number} [options.maxEqualZoomAltitude=850000.0] - Maximal altitude since segments on the screen bacame the same zoom level
101
+ * @param {Number} [options.maxEqualZoomAltitude=15000000.0] - Maximal altitude since segments on the screen bacame the same zoom level
97
102
  * @param {Number} [options.minEqualZoomAltitude=10000.0] - Minimal altitude since segments on the screen bacame the same zoom level
98
103
  * @param {Number} [options.minEqualZoomCameraSlope=0.8] - Minimal camera slope above te globe where segments on the screen bacame the same zoom level
99
104
  * @fires og.scene.Planet#draw
@@ -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}
@@ -180,7 +192,7 @@ export class Planet extends RenderNode {
180
192
  this._minAltitude = options.minAltitude;
181
193
  this._maxAltitude = options.maxAltitude;
182
194
 
183
- this.maxEqualZoomAltitude = options.maxEqualZoomAltitude || 850000.0;
195
+ this.maxEqualZoomAltitude = options.maxEqualZoomAltitude || 15000000.0;
184
196
  this.minEqualZoomAltitude = options.minEqualZoomAltitude || 10000.0;
185
197
  this.minEqualZoomCameraSlope = options.minEqualZoomCameraSlope || 0.8;
186
198
 
@@ -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),
@@ -731,31 +748,13 @@ export class Planet extends RenderNode {
731
748
  }
732
749
 
733
750
  // Creating quad trees nodes
734
- this._quadTree = new Node(
735
- Segment,
736
- this,
737
- quadTree.NW,
738
- null,
739
- 0,
740
- 0,
751
+ this._quadTree = new Node(Segment, this, quadTree.NW, null, 0, 0,
741
752
  Extent.createFromArray([-20037508.34, -20037508.34, 20037508.34, 20037508.34])
742
753
  );
743
- this._quadTreeNorth = new Node(
744
- SegmentLonLat,
745
- this,
746
- quadTree.NW,
747
- null,
748
- 0,
749
- 0,
754
+ this._quadTreeNorth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0,
750
755
  Extent.createFromArray([-180, mercator.MAX_LAT, 180, 90])
751
756
  );
752
- this._quadTreeSouth = new Node(
753
- SegmentLonLat,
754
- this,
755
- quadTree.NW,
756
- null,
757
- 0,
758
- 0,
757
+ this._quadTreeSouth = new Node(SegmentLonLat, this, quadTree.NW, null, 0, 0,
759
758
  Extent.createFromArray([-180, -90, 180, mercator.MIN_LAT])
760
759
  );
761
760
 
@@ -771,7 +770,7 @@ export class Planet extends RenderNode {
771
770
  // loading Earth night glowing texture
772
771
  if (this._useNightTexture) {
773
772
  createImageBitmap(NIGHT).then(
774
- (e) => (this._nightTexture = this.renderer.handler.createTexture(e))
773
+ (e) => (this._nightTexture = this.renderer.handler.createTextureDefault(e))
775
774
  );
776
775
  }
777
776
 
@@ -998,16 +997,10 @@ export class Planet extends RenderNode {
998
997
  _collectRenderNodes() {
999
998
  let cam = this.camera;
1000
999
 
1001
- this._lodRatio = math.lerp(
1002
- cam.slope < 0.0 ? 0.0 : cam.slope,
1003
- this._maxLodRatio,
1004
- this._minLodRatio
1005
- );
1000
+ this._lodSize = math.lerp(cam.slope < 0.0 ? 0.0 : cam.slope, this._curLodSize, this._minLodSize);
1006
1001
 
1007
1002
  cam._insideSegment = null;
1008
1003
 
1009
- this._nodeCounterError_ = 0;
1010
-
1011
1004
  // clear first
1012
1005
  this._clearRenderedNodeList();
1013
1006
 
@@ -1022,11 +1015,11 @@ export class Planet extends RenderNode {
1022
1015
 
1023
1016
  this._quadTree.renderTree(cam, 0, null);
1024
1017
 
1025
- if (
1026
- cam.slope > this.minEqualZoomCameraSlope &&
1018
+ if (cam.slope > this.minEqualZoomCameraSlope &&
1027
1019
  cam._lonLat.height < this.maxEqualZoomAltitude &&
1028
1020
  cam._lonLat.height > this.minEqualZoomAltitude
1029
1021
  ) {
1022
+
1030
1023
  this.minCurrZoom = this.maxCurrZoom;
1031
1024
 
1032
1025
  let temp = this._renderedNodes,
@@ -1043,7 +1036,8 @@ export class Planet extends RenderNode {
1043
1036
 
1044
1037
  for (var i = 0, len = temp.length; i < len; i++) {
1045
1038
  var ri = temp[i];
1046
- if (ri.segment.tileZoom === this.maxCurrZoom) {
1039
+ let ht = ri.segment.centerNormal.dot(cam._b);
1040
+ if (ri.segment.tileZoom === this.maxCurrZoom || ht < HORIZON_TANGENT) {
1047
1041
  this._renderedNodes.push(ri);
1048
1042
  let k = 0,
1049
1043
  inFrustum = ri.inFrustum;
@@ -1124,7 +1118,7 @@ export class Planet extends RenderNode {
1124
1118
  gl.disable(gl.POLYGON_OFFSET_FILL);
1125
1119
 
1126
1120
  if (frustumIndex === cam.FARTHEST_FRUSTUM_INDEX) {
1127
- if (this._skipPreRender && (!this._renderCompletedActivated || cam.isMoved)) {
1121
+ if (this._skipPreRender/* && (!this._renderCompletedActivated || cam.isMoved)*/) {
1128
1122
  this._collectRenderNodes();
1129
1123
  }
1130
1124
  this._skipPreRender = true;
@@ -1147,12 +1141,12 @@ export class Planet extends RenderNode {
1147
1141
  this._vectorTileCreator.frame();
1148
1142
  }
1149
1143
 
1150
- gl.blendEquation(gl.FUNC_ADD);
1151
1144
 
1152
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
1145
+ gl.enable(gl.CULL_FACE);
1153
1146
 
1154
1147
  gl.enable(gl.BLEND);
1155
- gl.enable(gl.CULL_FACE);
1148
+ gl.blendEquation(gl.FUNC_ADD);
1149
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
1156
1150
 
1157
1151
  if (this.lightEnabled) {
1158
1152
  h.programs.drawnode_screen_wl.activate();
@@ -1165,13 +1159,14 @@ export class Planet extends RenderNode {
1165
1159
  gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
1166
1160
  gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
1167
1161
 
1162
+ gl.uniform3fv(shu.diffuse, this._diffuse);
1163
+ gl.uniform3fv(shu.ambient, this._ambient);
1164
+ gl.uniform4fv(shu.specular, this._specular);
1165
+
1168
1166
  // bind night glowing material
1169
1167
  gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
1170
- gl.bindTexture(
1171
- gl.TEXTURE_2D,
1172
- (this.camera._lonLat.height > 329958.0 &&
1173
- (this._nightTexture || this.transparentTexture)) ||
1174
- this.transparentTexture
1168
+ gl.bindTexture(gl.TEXTURE_2D,
1169
+ (this.camera._lonLat.height > 329958.0 && (this._nightTexture || this.transparentTexture)) || this.transparentTexture
1175
1170
  );
1176
1171
  gl.uniform1i(shu.nightTexture, this.SLICE_SIZE);
1177
1172
 
@@ -1180,34 +1175,6 @@ export class Planet extends RenderNode {
1180
1175
  gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
1181
1176
  gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
1182
1177
 
1183
- var b = this.baseLayer;
1184
- if (b) {
1185
- this._diffuseMaterialArr[0] = b.diffuse.x;
1186
- this._diffuseMaterialArr[1] = b.diffuse.y;
1187
- this._diffuseMaterialArr[2] = b.diffuse.z;
1188
-
1189
- this._ambientMaterialArr[0] = b.ambient.x;
1190
- this._ambientMaterialArr[1] = b.ambient.y;
1191
- this._ambientMaterialArr[2] = b.ambient.z;
1192
-
1193
- this._specularMaterialArr[0] = b.specular.x;
1194
- this._specularMaterialArr[1] = b.specular.y;
1195
- this._specularMaterialArr[2] = b.specular.z;
1196
- this._specularMaterialArr[3] = b.shininess;
1197
- } else {
1198
- this._diffuseMaterialArr[0] = 0.89;
1199
- this._diffuseMaterialArr[1] = 0.9;
1200
- this._diffuseMaterialArr[2] = 0.83;
1201
-
1202
- this._ambientMaterialArr[0] = 0.0;
1203
- this._ambientMaterialArr[1] = 0.0;
1204
- this._ambientMaterialArr[2] = 0.0;
1205
-
1206
- this._specularMaterialArr[0] = 0.0003;
1207
- this._specularMaterialArr[1] = 0.00012;
1208
- this._specularMaterialArr[2] = 0.00001;
1209
- this._specularMaterialArr[3] = 20.0;
1210
- }
1211
1178
  } else {
1212
1179
  h.programs.drawnode_screen_nl.activate();
1213
1180
  sh = h.programs.drawnode_screen_nl._program;
@@ -1266,63 +1233,45 @@ export class Planet extends RenderNode {
1266
1233
  * @protected
1267
1234
  */
1268
1235
  _renderHeightPickingFramebufferPASS() {
1269
- this._heightPickingFramebuffer.activate();
1270
-
1271
- let sh;
1272
- let renderer = this.renderer;
1273
- let h = renderer.handler;
1274
- let gl = h.gl;
1275
- let cam = renderer.activeCamera;
1276
- let frustumIndex = cam.getCurrentFrustum();
1236
+ if (!this.terrain.isEmpty) {
1277
1237
 
1278
- if (frustumIndex === cam.FARTHEST_FRUSTUM_INDEX) {
1279
- gl.clearColor(0.0, 0.0, 0.0, 1.0);
1280
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
1281
- } else {
1282
- gl.clear(gl.DEPTH_BUFFER_BIT);
1283
- }
1238
+ this._heightPickingFramebuffer.activate();
1284
1239
 
1285
- gl.enable(gl.CULL_FACE);
1286
- gl.blendEquation(gl.FUNC_ADD);
1287
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
1288
- gl.enable(gl.BLEND);
1240
+ let sh;
1241
+ let renderer = this.renderer;
1242
+ let h = renderer.handler;
1243
+ let gl = h.gl;
1244
+ let cam = renderer.activeCamera;
1245
+ let frustumIndex = cam.getCurrentFrustum();
1289
1246
 
1290
- h.programs.drawnode_heightPicking.activate();
1291
- sh = h.programs.drawnode_heightPicking._program;
1292
- let shu = sh.uniforms;
1247
+ if (frustumIndex === cam.FARTHEST_FRUSTUM_INDEX) {
1248
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
1249
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
1250
+ } else {
1251
+ gl.clear(gl.DEPTH_BUFFER_BIT);
1252
+ }
1293
1253
 
1294
- gl.uniformMatrix4fv(shu.viewMatrix, false, renderer.activeCamera.getViewMatrix());
1295
- gl.uniformMatrix4fv(
1296
- shu.projectionMatrix,
1297
- false,
1298
- renderer.activeCamera.getProjectionMatrix()
1299
- );
1254
+ h.programs.drawnode_heightPicking.activate();
1255
+ sh = h.programs.drawnode_heightPicking._program;
1256
+ let shu = sh.uniforms;
1300
1257
 
1301
- gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
1302
- gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1258
+ gl.uniformMatrix4fv(shu.viewMatrix, false, renderer.activeCamera.getViewMatrix());
1259
+ gl.uniformMatrix4fv(shu.projectionMatrix, false, renderer.activeCamera.getProjectionMatrix());
1303
1260
 
1304
- // drawing planet nodes
1305
- var rn = this._renderedNodesInFrustum[frustumIndex],
1306
- sl = this._visibleTileLayerSlices;
1261
+ gl.uniform3fv(shu.eyePositionHigh, cam.eyeHigh);
1262
+ gl.uniform3fv(shu.eyePositionLow, cam.eyeLow);
1307
1263
 
1308
- let i = rn.length;
1309
- while (i--) {
1310
- rn[i].segment.heightPickingRendering(sh, sl[0], 0);
1311
- }
1264
+ // drawing planet nodes
1265
+ var rn = this._renderedNodesInFrustum[frustumIndex],
1266
+ sl = this._visibleTileLayerSlices;
1312
1267
 
1313
- //gl.enable(gl.POLYGON_OFFSET_FILL);
1314
- for (let j = 1, len = sl.length; j < len; j++) {
1315
- i = rn.length;
1316
- //gl.polygonOffset(0, -j);
1268
+ let i = rn.length;
1317
1269
  while (i--) {
1318
- rn[i].segment.heightPickingRendering(sh, sl[j], j, this.transparentTexture, true);
1270
+ rn[i].segment.heightPickingRendering(sh, sl[0]);
1319
1271
  }
1320
- }
1321
- //gl.disable(gl.POLYGON_OFFSET_FILL);
1322
1272
 
1323
- gl.disable(gl.BLEND);
1324
-
1325
- this._heightPickingFramebuffer.deactivate();
1273
+ this._heightPickingFramebuffer.deactivate();
1274
+ }
1326
1275
  }
1327
1276
 
1328
1277
  /**
@@ -1385,6 +1334,7 @@ export class Planet extends RenderNode {
1385
1334
  let cam = renderer.activeCamera;
1386
1335
 
1387
1336
  gl.disable(gl.BLEND);
1337
+ gl.disable(gl.POLYGON_OFFSET_FILL);
1388
1338
 
1389
1339
  gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
1390
1340
  gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
@@ -1400,16 +1350,7 @@ export class Planet extends RenderNode {
1400
1350
 
1401
1351
  let i = rn.length;
1402
1352
  while (i--) {
1403
- rn[i].segment.depthRendering(sh, sl[0], 0);
1404
- }
1405
-
1406
- gl.enable(gl.POLYGON_OFFSET_FILL);
1407
- for (let j = 1, len = sl.length; j < len; j++) {
1408
- i = rn.length;
1409
- gl.polygonOffset(0, -j);
1410
- while (i--) {
1411
- rn[i].segment.depthRendering(sh, sl[j], j, this.transparentTexture, true);
1412
- }
1353
+ rn[i].segment.depthRendering(sh, sl[0]);
1413
1354
  }
1414
1355
  }
1415
1356
 
@@ -1509,12 +1450,11 @@ export class Planet extends RenderNode {
1509
1450
  * Returns 3d cartesian coordinates on the relief planet by mouse cursor
1510
1451
  * position or null if mouse cursor is outside the planet.
1511
1452
  * @public
1512
- * @param {Boolean} [force=false] - Force framebuffer rendering.
1513
1453
  * @returns {Vec3} -
1514
1454
  */
1515
- getCartesianFromMouseTerrain(force) {
1455
+ getCartesianFromMouseTerrain() {
1516
1456
  var ms = this.renderer.events.mouseState;
1517
- var distance = this.getDistanceFromPixel(ms, force);
1457
+ var distance = this.getDistanceFromPixel(ms);
1518
1458
  if (distance) {
1519
1459
  return ms.direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
1520
1460
  }
@@ -1529,8 +1469,8 @@ export class Planet extends RenderNode {
1529
1469
  * @param {Boolean} [force=false] - Force framebuffer rendering.
1530
1470
  * @returns {Vec3} -
1531
1471
  */
1532
- getCartesianFromPixelTerrain(px, force) {
1533
- var distance = this.getDistanceFromPixel(px, force);
1472
+ getCartesianFromPixelTerrain(px) {
1473
+ var distance = this.getDistanceFromPixel(px);
1534
1474
  if (distance) {
1535
1475
  var direction = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1536
1476
  return direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
@@ -1601,40 +1541,48 @@ export class Planet extends RenderNode {
1601
1541
  * @returns {number} -
1602
1542
  */
1603
1543
  getDistanceFromPixel(px) {
1604
- let r = this.renderer,
1605
- cnv = this.renderer.handler.canvas;
1606
-
1607
- let spx = px.x / cnv.width,
1608
- spy = (cnv.height - px.y) / cnv.height;
1609
-
1610
- // HEIGHT
1611
- this._heightPickingFramebuffer.activate();
1612
- this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
1613
- this._heightPickingFramebuffer.deactivate();
1614
-
1615
- let dist = decodeFloatFromRGBAArr(_tempPickingPix_);
1616
-
1617
- if (!(_tempPickingPix_[0] || _tempPickingPix_[1] || _tempPickingPix_[2])) {
1618
- dist = this.getDistanceFromPixelEllipsoid(px) || 0;
1619
- } else if (dist < DEPTH_DISTANCE) {
1620
- r.screenDepthFramebuffer.activate();
1621
- r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy, 0);
1622
- r.screenDepthFramebuffer.deactivate();
1623
-
1624
- let screenPos = new Vec4(
1625
- spx * 2.0 - 1.0,
1626
- spy * 2.0 - 1.0,
1627
- (_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
1628
- 1.0 * 2.0 - 1.0
1629
- );
1630
- let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
1631
- let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1632
- dist =
1633
- -(viewPosition.z / viewPosition.w) /
1634
- dir.dot(this.renderer.activeCamera.getForward());
1635
- }
1544
+ if (this.terrain.isEmpty) {
1545
+ return this.getDistanceFromPixelEllipsoid(px) || 0;
1546
+ } else {
1547
+
1548
+ let r = this.renderer,
1549
+ cnv = this.renderer.handler.canvas;
1550
+
1551
+ let spx = px.x / cnv.width,
1552
+ spy = (cnv.height - px.y) / cnv.height;
1553
+
1554
+ _tempPickingPix_[0] = _tempPickingPix_[1] = _tempPickingPix_[2] = 0.0;
1555
+
1556
+ let dist = 0;
1636
1557
 
1637
- return dist;
1558
+ // HEIGHT
1559
+ this._heightPickingFramebuffer.activate();
1560
+ if (this._heightPickingFramebuffer.isComplete()) {
1561
+ this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
1562
+ dist = decodeFloatFromRGBAArr(_tempPickingPix_);
1563
+ }
1564
+ this._heightPickingFramebuffer.deactivate();
1565
+
1566
+ if (!(_tempPickingPix_[0] || _tempPickingPix_[1] || _tempPickingPix_[2])) {
1567
+ dist = this.getDistanceFromPixelEllipsoid(px) || 0;
1568
+ } else if (dist < DEPTH_DISTANCE) {
1569
+ r.screenDepthFramebuffer.activate();
1570
+ if (r.screenDepthFramebuffer.isComplete()) {
1571
+ r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
1572
+ let screenPos = new Vec4(
1573
+ spx * 2.0 - 1.0,
1574
+ spy * 2.0 - 1.0,
1575
+ (_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
1576
+ 1.0 * 2.0 - 1.0
1577
+ );
1578
+ let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
1579
+ let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1580
+ dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
1581
+ }
1582
+ r.screenDepthFramebuffer.deactivate();
1583
+ }
1584
+ return dist;
1585
+ }
1638
1586
  }
1639
1587
 
1640
1588
  /**