@pirireis/webglobeplugins 0.17.0 → 1.0.2

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 (274) hide show
  1. package/Math/{angle-calculation.js → angle-calculation.ts} +18 -14
  2. package/Math/{arc-cdf-points.js → arc-cdf-points.ts} +329 -272
  3. package/Math/{arc-generate-points-exponantial.js → arc-generate-points-exponantial.ts} +299 -254
  4. package/Math/{arc.js → arc.ts} +421 -292
  5. package/Math/bounds/line-bbox.js +225 -186
  6. package/Math/{circle-cdf-points.js → circle-cdf-points.ts} +143 -78
  7. package/Math/{circle.js → circle.ts} +49 -33
  8. package/Math/{constants.js → constants.ts} +12 -4
  9. package/Math/contour/{quadtreecontours.js → quadtreecontours.ts} +371 -300
  10. package/Math/contour/quadtreecontours1.js +336 -298
  11. package/Math/{finite-line-2d.js → finite-line-2d.ts} +68 -58
  12. package/Math/haversine.ts +33 -0
  13. package/Math/index.js +0 -1
  14. package/Math/juction/{arc-plane.js → arc-plane.ts} +203 -143
  15. package/Math/juction/{line-sphere.js → line-sphere.ts} +32 -22
  16. package/Math/juction/{plane-plane.js → plane-plane.ts} +62 -53
  17. package/Math/{line.js → line.ts} +84 -52
  18. package/Math/matrix4.ts +0 -0
  19. package/Math/mesh/mapbox-delaunay.d.ts +74 -0
  20. package/Math/{methods.js → methods.ts} +182 -107
  21. package/Math/{plane.js → plane.ts} +92 -56
  22. package/Math/{quaternion.js → quaternion.ts} +128 -106
  23. package/Math/roadmap.md +10 -0
  24. package/Math/templete-shapes/{grid-visually-equal.js → grid-visually-equal.ts} +118 -65
  25. package/Math/tessellation/constants.ts +1 -0
  26. package/Math/tessellation/methods.ts +79 -0
  27. package/Math/tessellation/nearest-value-padding.ts +147 -0
  28. package/Math/tessellation/roadmap.md +48 -0
  29. package/Math/tessellation/spherical-triangle-area.ts +127 -0
  30. package/Math/tessellation/tile-merger.ts +578 -0
  31. package/Math/tessellation/triangle-tessellation.ts +533 -0
  32. package/Math/tessellation/types.ts +1 -0
  33. package/Math/types.ts +68 -0
  34. package/Math/utils.js +3 -2
  35. package/Math/{vec3.js → vec3.ts} +227 -151
  36. package/Math/xyz-tile.ts +26 -0
  37. package/algorithms/search-binary.js +14 -16
  38. package/altitude-locator/adaptors.js +0 -1
  39. package/altitude-locator/keymethod.js +0 -1
  40. package/altitude-locator/plugin.js +445 -345
  41. package/altitude-locator/types.js +26 -21
  42. package/compass-rose/compass-rose-padding-flat.js +274 -230
  43. package/compass-rose/{compass-text-writer.js → compass-text-writer.ts} +210 -155
  44. package/compass-rose/index.js +3 -3
  45. package/{constants.js → constants.ts} +8 -6
  46. package/heatwave/datamanager.js +168 -149
  47. package/heatwave/heatwave.js +261 -206
  48. package/heatwave/index.js +5 -5
  49. package/heatwave/isobar.js +340 -303
  50. package/heatwave/{texture-point-sampler.js → texture-point-sampler.ts} +220 -187
  51. package/investigation-tools/draw/tiles/adapters.ts +133 -0
  52. package/investigation-tools/draw/tiles/tiles.ts +162 -0
  53. package/jest.config.js +6 -7
  54. package/package.json +1 -1
  55. package/pin/pin-object-array1.js +381 -300
  56. package/pin/pin-point-totem1.js +77 -60
  57. package/programs/arrowfield/arrow-field.js +89 -60
  58. package/programs/arrowfield/logic.js +173 -141
  59. package/programs/data2legend/density-to-legend.js +86 -68
  60. package/programs/data2legend/point-to-density-texture.js +84 -67
  61. package/programs/float2legendwithratio/index.js +3 -2
  62. package/programs/float2legendwithratio/logic.js +144 -118
  63. package/programs/float2legendwithratio/object.js +141 -104
  64. package/programs/helpers/blender.js +73 -58
  65. package/programs/helpers/{fadeaway.js → fadeaway.ts} +73 -55
  66. package/programs/index.js +19 -20
  67. package/programs/line-on-globe/circle-accurate-3d.js +112 -85
  68. package/programs/line-on-globe/circle-accurate-flat.js +200 -148
  69. package/programs/line-on-globe/degree-padding-around-circle-3d.js +134 -102
  70. package/programs/line-on-globe/index.js +0 -1
  71. package/programs/line-on-globe/lines-color-instanced-flat.js +99 -80
  72. package/programs/line-on-globe/linestrip/data.ts +29 -0
  73. package/programs/line-on-globe/linestrip/{linestrip.js → linestrip.ts} +152 -93
  74. package/programs/line-on-globe/{naive-accurate-flexible.js → naive-accurate-flexible.ts} +175 -126
  75. package/programs/line-on-globe/util.js +8 -5
  76. package/programs/picking/pickable-polygon-renderer.js +129 -98
  77. package/programs/picking/pickable-renderer.js +130 -98
  78. package/programs/point-on-globe/element-globe-surface-glow.js +122 -93
  79. package/programs/point-on-globe/element-point-glow.js +114 -80
  80. package/programs/point-on-globe/square-pixel-point.js +139 -120
  81. package/programs/polygon-on-globe/roadmap.md +8 -0
  82. package/programs/polygon-on-globe/texture-dem-triangles.ts +290 -0
  83. package/programs/{programcache.js → programcache.ts} +134 -126
  84. package/programs/rings/index.js +1 -1
  85. package/programs/rings/partial-ring/{piece-of-pie.js → piece-of-pie.ts} +222 -152
  86. package/programs/totems/camera-totem-attactment-interface.ts +4 -0
  87. package/programs/totems/{camerauniformblock.js → camerauniformblock.ts} +326 -230
  88. package/programs/totems/{canvas-webglobe-info.js → canvas-webglobe-info.ts} +147 -132
  89. package/programs/totems/dem-textures-manager.ts +368 -0
  90. package/programs/totems/{globe-changes.js → globe-changes.ts} +79 -59
  91. package/programs/totems/gpu-selection-uniform-block.js +127 -99
  92. package/programs/totems/{index.js → index.ts} +2 -2
  93. package/programs/two-d/pixel-padding-for-compass.js +101 -87
  94. package/programs/util.js +19 -14
  95. package/programs/vectorfields/logics/{constants.js → constants.ts} +5 -4
  96. package/programs/vectorfields/logics/drawrectangleparticles.ts +182 -0
  97. package/programs/vectorfields/logics/index.js +4 -2
  98. package/programs/vectorfields/logics/particle-ubo.ts +23 -0
  99. package/programs/vectorfields/logics/{pixelbased.js → pixelbased.ts} +119 -84
  100. package/programs/vectorfields/logics/ubo.js +57 -51
  101. package/programs/vectorfields/{pingpongbuffermanager.js → pingpongbuffermanager.ts} +113 -73
  102. package/publish.bat +62 -0
  103. package/range-tools-on-terrain/bearing-line/{adapters.js → adapters.ts} +154 -114
  104. package/range-tools-on-terrain/bearing-line/{plugin.js → plugin.ts} +569 -457
  105. package/range-tools-on-terrain/bearing-line/types.ts +65 -0
  106. package/range-tools-on-terrain/circle-line-chain/{adapters.js → adapters.ts} +104 -85
  107. package/range-tools-on-terrain/circle-line-chain/{chain-list-map.js → chain-list-map.ts} +446 -382
  108. package/range-tools-on-terrain/circle-line-chain/{plugin.js → plugin.ts} +607 -464
  109. package/range-tools-on-terrain/circle-line-chain/types.ts +43 -0
  110. package/range-tools-on-terrain/range-ring/{adapters.js → adapters.ts} +114 -93
  111. package/range-tools-on-terrain/range-ring/{enum.js → enum.ts} +2 -2
  112. package/range-tools-on-terrain/range-ring/{plugin.js → plugin.ts} +444 -377
  113. package/range-tools-on-terrain/range-ring/rangeringangletext.ts +396 -0
  114. package/range-tools-on-terrain/range-ring/types.ts +30 -0
  115. package/semiplugins/interface.ts +14 -0
  116. package/semiplugins/lightweight/{line-plugin.js → line-plugin.ts} +342 -221
  117. package/semiplugins/lightweight/{piece-of-pie-plugin.js → piece-of-pie-plugin.ts} +275 -200
  118. package/semiplugins/shape-on-terrain/{arc-plugin.js → arc-plugin.ts} +616 -472
  119. package/semiplugins/shape-on-terrain/{circle-plugin.js → circle-plugin.ts} +588 -444
  120. package/semiplugins/shape-on-terrain/goal.md +12 -0
  121. package/semiplugins/shape-on-terrain/{padding-1-degree.js → padding-1-degree.ts} +713 -539
  122. package/semiplugins/shape-on-terrain/terrain-polygon/adapters.ts +69 -0
  123. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache-shortcuts.md +20 -0
  124. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache.ts +149 -0
  125. package/semiplugins/shape-on-terrain/terrain-polygon/data/index-polygon-map.ts +58 -0
  126. package/semiplugins/shape-on-terrain/terrain-polygon/data/manager.ts +4 -0
  127. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +196 -0
  128. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.ts +209 -0
  129. package/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.ts +144 -0
  130. package/semiplugins/shape-on-terrain/terrain-polygon/data/random.ts +165 -0
  131. package/semiplugins/shape-on-terrain/terrain-polygon/data/readme.md +5 -0
  132. package/semiplugins/shape-on-terrain/terrain-polygon/data/types.ts +37 -0
  133. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker-contact.ts +81 -0
  134. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +146 -0
  135. package/semiplugins/shape-on-terrain/terrain-polygon/notes.md +90 -0
  136. package/semiplugins/shape-on-terrain/terrain-polygon/terrain-polygon.ts +265 -0
  137. package/semiplugins/shape-on-terrain/terrain-polygon/types.ts +69 -0
  138. package/semiplugins/shell/bbox-renderer/index.ts +2 -0
  139. package/semiplugins/shell/bbox-renderer/{logic.js → logic.ts} +273 -249
  140. package/semiplugins/shell/bbox-renderer/object.ts +129 -0
  141. package/semiplugins/type.ts +8 -0
  142. package/semiplugins/utility/{container-plugin.js → container-plugin.ts} +126 -94
  143. package/semiplugins/utility/{object-pass-container-plugin.js → object-pass-container-plugin.ts} +101 -80
  144. package/shaders/fragment-toy/firework.js +1 -1
  145. package/shaders/fragment-toy/singularity.js +5 -2
  146. package/terrain-plugin.mmd +83 -0
  147. package/tests/Math/arc-sampling-test.js +367 -0
  148. package/tests/Math/arc-sampling-test.ts +429 -0
  149. package/tests/Math/arc.test.ts +77 -0
  150. package/tests/Math/junction/arc-limit.test.ts +7 -0
  151. package/tests/Math/junction/arc-plane-points.test.ts +196 -0
  152. package/tests/Math/junction/arc-plane.test.ts +172 -0
  153. package/tests/Math/junction/line-sphere.test.ts +127 -0
  154. package/tests/Math/junction/plane-plane.test.ts +91 -0
  155. package/tests/Math/plane-test.ts +17 -0
  156. package/tests/Math/plane.test.ts +43 -0
  157. package/tests/Math/vec3.test.ts +33 -0
  158. package/tracks/point-heat-map/adaptors/timetracksplugin-format-to-this.js +78 -63
  159. package/tracks/point-heat-map/index.js +0 -1
  160. package/tracks/point-heat-map/plugin-webworker.js +148 -121
  161. package/tracks/point-heat-map/point-to-heat-map-flow.js +150 -121
  162. package/tracks/point-heat-map/readme.md +15 -0
  163. package/tracks/point-tracks/key-methods.js +3 -2
  164. package/tracks/point-tracks/plugin.js +487 -393
  165. package/tracks/timetracks/adaptors-line-strip.js +79 -65
  166. package/tracks/timetracks/plugin-line-strip.js +295 -240
  167. package/tracks/timetracks/program-line-strip.js +495 -411
  168. package/tracks/timetracks/programpoint-line-strip.js +137 -109
  169. package/tracks/timetracks/readme.md +1 -0
  170. package/tsconfig.json +22 -0
  171. package/types/@pirireis/webglobe.d.ts +102 -0
  172. package/types/delaunator.d.ts +40 -0
  173. package/types/earcut.d.ts +11 -0
  174. package/types/rbush.d.ts +57 -0
  175. package/types.ts +319 -0
  176. package/util/account/bufferoffsetmanager.js +209 -176
  177. package/util/account/create-buffermap-orchastration.ts +85 -0
  178. package/util/account/index.js +6 -3
  179. package/util/account/single-attribute-buffer-management/{buffer-manager.js → buffer-manager.ts} +151 -117
  180. package/util/account/single-attribute-buffer-management/{buffer-orchestrator.js → buffer-orchestrator.ts} +238 -212
  181. package/util/account/single-attribute-buffer-management/{buffer-orchestrator1.js → buffer-orchestrator1.ts} +184 -159
  182. package/util/account/single-attribute-buffer-management/{index.js → index.ts} +11 -4
  183. package/util/account/single-attribute-buffer-management/{object-store.js → object-store.ts} +76 -55
  184. package/util/account/single-attribute-buffer-management/types.ts +43 -0
  185. package/util/account/util.js +22 -18
  186. package/util/algorithms/index.js +0 -1
  187. package/util/algorithms/search-binary.js +26 -25
  188. package/util/build-strategy/{static-dynamic.js → static-dynamic.ts} +50 -41
  189. package/util/check/index.js +0 -1
  190. package/util/check/typecheck.ts +74 -0
  191. package/util/{frame-counter-trigger.js → frame-counter-trigger.ts} +99 -84
  192. package/util/geometry/{index.js → index.ts} +155 -121
  193. package/util/gl-util/buffer/{attribute-loader.js → attribute-loader.ts} +84 -62
  194. package/util/gl-util/buffer/{index.js → index.ts} +6 -3
  195. package/util/gl-util/draw-options/{methods.js → methods.ts} +47 -32
  196. package/util/gl-util/uniform-block/{manager.js → manager.ts} +232 -190
  197. package/util/{webglobe/gldefaultstates.js → globe-default-gl-states.ts} +5 -4
  198. package/util/helper-methods.ts +9 -0
  199. package/util/index.js +9 -10
  200. package/util/interpolation/index.js +0 -1
  201. package/util/interpolation/timetrack/index.js +9 -2
  202. package/util/interpolation/timetrack/timetrack-interpolator.js +94 -79
  203. package/util/interpolation/timetrack/web-worker.js +51 -46
  204. package/util/picking/{fence.js → fence.ts} +47 -41
  205. package/util/picking/picker-displayer.ts +226 -0
  206. package/util/programs/draw-from-pixel-coords.js +201 -164
  207. package/util/programs/{draw-texture-on-canvas.js → draw-texture-on-canvas.ts} +92 -67
  208. package/util/programs/supersampletotextures.js +130 -97
  209. package/util/programs/texturetoglobe.js +153 -128
  210. package/util/shaderfunctions/{geometrytransformations.js → geometrytransformations.ts} +169 -41
  211. package/util/shaderfunctions/index.js +2 -2
  212. package/util/shaderfunctions/nodata.js +4 -2
  213. package/util/shaderfunctions/noisefunctions.js +10 -7
  214. package/util/{webglobjectbuilders.js → webglobjectbuilders.ts} +446 -358
  215. package/vectorfield/arrowfield/adaptor.js +11 -11
  216. package/vectorfield/arrowfield/index.js +3 -3
  217. package/vectorfield/arrowfield/plugin.js +128 -83
  218. package/vectorfield/waveparticles/adaptor.js +16 -15
  219. package/vectorfield/waveparticles/index.js +3 -3
  220. package/vectorfield/waveparticles/plugin.ts +506 -0
  221. package/vectorfield/wind/adapters/image-to-fields.ts +74 -0
  222. package/vectorfield/wind/adapters/types.ts +12 -0
  223. package/vectorfield/wind/{imagetovectorfieldandmagnitude.js → imagetovectorfieldandmagnitude.ts} +78 -56
  224. package/vectorfield/wind/index.js +5 -5
  225. package/vectorfield/wind/plugin-persistant copy.ts +461 -0
  226. package/vectorfield/wind/plugin-persistant.ts +483 -0
  227. package/vectorfield/wind/plugin.js +883 -671
  228. package/vectorfield/wind/vectorfieldimage.js +27 -23
  229. package/write-text/{context-text-bulk.js → context-text-bulk.ts} +285 -200
  230. package/write-text/context-text3.ts +252 -0
  231. package/write-text/{context-text4.js → context-text4.ts} +231 -145
  232. package/write-text/context-textDELETE.js +125 -94
  233. package/write-text/objectarraylabels/{index.js → index.ts} +2 -2
  234. package/write-text/objectarraylabels/objectarraylabels.d.ts +72 -0
  235. package/write-text/objectarraylabels/objectarraylabels.js +247 -200
  236. package/Math/matrix4.js +0 -1
  237. package/Math/tessellation/earcut/adapters.js +0 -37
  238. package/Math/tessellation/hybrid-triangle-tessellation-meta.js +0 -123
  239. package/Math/tessellation/methods.js +0 -46
  240. package/Math/tessellation/shred-input.js +0 -18
  241. package/Math/tessellation/tile-merger.js +0 -56
  242. package/Math/tessellation/tiler.js +0 -50
  243. package/Math/tessellation/triangle-tessellation-meta.js +0 -516
  244. package/Math/tessellation/triangle-tessellation.js +0 -14
  245. package/Math/tessellation/types.js +0 -1
  246. package/Math/tessellation/zoom-catch.js +0 -1
  247. package/Math/types.js +0 -1
  248. package/programs/line-on-globe/linestrip/data.js +0 -4
  249. package/programs/polygon-on-globe/partial-tesselation.js +0 -1
  250. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +0 -204
  251. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin.js +0 -118
  252. package/programs/polygon-on-globe/texture-dem-triangles.js +0 -236
  253. package/programs/vectorfields/logics/drawrectangleparticles.js +0 -112
  254. package/programs/vectorfields/logics/ubo-new.js +0 -25
  255. package/range-tools-on-terrain/bearing-line/types.js +0 -1
  256. package/range-tools-on-terrain/circle-line-chain/types.js +0 -1
  257. package/range-tools-on-terrain/range-ring/rangeringangletext.js +0 -331
  258. package/range-tools-on-terrain/range-ring/types.js +0 -9
  259. package/semiplugins/interface.js +0 -1
  260. package/semiplugins/shape-on-terrain/terrain-cover/texture-dem-cover.js +0 -1
  261. package/semiplugins/shell/bbox-renderer/index.js +0 -2
  262. package/semiplugins/shell/bbox-renderer/object.js +0 -65
  263. package/semiplugins/type.js +0 -1
  264. package/types.js +0 -19
  265. package/util/account/create-buffermap-orchastration.js +0 -39
  266. package/util/account/single-attribute-buffer-management/types.js +0 -1
  267. package/util/check/typecheck.js +0 -66
  268. package/util/gl-util/uniform-block/types.js +0 -1
  269. package/util/picking/picker-displayer.js +0 -134
  270. package/util/webglobe/index.js +0 -2
  271. package/util/webglobe/rasteroverlay.js +0 -76
  272. package/vectorfield/waveparticles/plugin.js +0 -290
  273. package/write-text/attached-text-writer.js +0 -95
  274. package/write-text/context-text3.js +0 -167
@@ -1,32 +1,39 @@
1
- // Z in kolometers
2
- //
3
- const EPSILON = 0.00001;
1
+ // Z in kolometers
2
+ //
3
+
4
+ const EPSILON = 0.00001;
5
+
4
6
  export const POLE = `
5
7
  #ifndef POLE
6
8
  #define POLE 20037508.34
7
9
  #endif
8
- `;
10
+ `;
11
+
9
12
  export const R = `
10
13
  #ifndef R
11
14
  #define R 6378137.0
12
15
  #endif
13
- `;
16
+ `;
17
+
14
18
  export const PI = `
15
19
  #ifndef PI
16
20
  #define PI 3.141592653589793
17
21
 
18
22
  #endif
19
- `;
23
+ `;
24
+
20
25
  export const POLE_BY_PI = `
21
26
  #ifndef POLE_BY_PI
22
27
  #define POLE_BY_PI 6378137.0
23
28
  #endif
24
- `;
29
+ `;
30
+
25
31
  export const R_3D = `
26
32
  #ifndef R_3D
27
33
  #define R_3D 6378.137
28
34
  #endif
29
- `;
35
+ `;
36
+
30
37
  export const pixelXYToCartesian3DPoint = R_3D + PI + `
31
38
  vec3 pixelXYToCartesian3DPoint( vec3 position) {
32
39
  float longRad = PI * (2.0 * position.x - 1.0);
@@ -37,7 +44,8 @@ vec3 pixelXYToCartesian3DPoint( vec3 position) {
37
44
  float z = radius * cos(latRad);
38
45
  return vec3(x, y, z);
39
46
  }
40
- `;
47
+ `;
48
+
41
49
  export const pixelXYToCartesian2DPoint = PI + POLE + POLE_BY_PI + `
42
50
  vec2 pixelXYToCartesian2DPoint( vec2 position, vec2 translate, vec2 mapWH, vec2 screenWH) {
43
51
  float x = (2.0 * position.x - 1.0) * POLE;
@@ -46,21 +54,26 @@ vec2 pixelXYToCartesian2DPoint( vec2 position, vec2 translate, vec2 mapWH, vec2
46
54
  y = (1.0 - (y - translate.y) / mapWH.y) * screenWH.y;
47
55
  return vec2(x, y);
48
56
  }
49
- `;
50
- // TODO: rename it to mercatorXYToGLPosition
57
+ `;
58
+
59
+ // TODO: rename it to mercatorXYToGLPosition
51
60
  export const mercatorXYToGLPosition = `
52
61
  vec4 mercatorXYToGLPosition( vec2 position) { // projection, translate, mapWH, screenWH comes from camera uniform block
53
62
  float x = (( position.x - translate.x ) / mapWH.x) * screenWH.x;
54
63
  float y = (1.0 - (position.y - translate.y) / mapWH.y) * screenWH.y;
55
64
  return projection * vec4(x, y, 0.0, 1.0);
56
65
  }
57
- `;
66
+ `;
67
+
58
68
  export const cartesian3DToGLPosition = `
59
69
  vec4 cartesian3DToGLPosition( vec3 position) {
60
70
  return projection * view * vec4(position - translate, 1.0);
61
71
  }
62
- `;
63
- // pi / pole = 2 / R
72
+ `
73
+
74
+
75
+ // pi / pole = 2 / R
76
+
64
77
  export const longLatRadToMercator = R + PI + `
65
78
  vec2 longLatRadToMercator( vec2 longLatRad) {
66
79
  float x = R * longLatRad.x;
@@ -68,7 +81,9 @@ vec2 longLatRadToMercator( vec2 longLatRad) {
68
81
  y -= mix(-60.0, 60.0, abs(longLatRad.y + PI / 8.0) / (PI / 4.0));
69
82
  return vec2(x, y);
70
83
  }
71
- `;
84
+ `;
85
+
86
+
72
87
  export const longLatRadToCartesian3D = R_3D + `
73
88
  vec3 longLatRadToCartesian3D( vec2 longLat) {
74
89
  float x = R_3D * cos(longLat.y) * cos(longLat.x);
@@ -76,7 +91,8 @@ vec3 longLatRadToCartesian3D( vec2 longLat) {
76
91
  float z = R_3D * sin(longLat.y);
77
92
  return vec3(x, y, z);
78
93
  }
79
- `;
94
+ `;
95
+
80
96
  export const longLatRadToCartesian3DWithR = `
81
97
  vec3 longLatRadToCartesian3DWithR( vec2 longLat, float radius) {
82
98
  float x = radius * cos(longLat.y) * cos(longLat.x);
@@ -84,8 +100,9 @@ vec3 longLatRadToCartesian3DWithR( vec2 longLat, float radius) {
84
100
  float z = radius * sin(longLat.y);
85
101
  return vec3(x, y, z);
86
102
  }
87
- `;
88
- // TODO: Make it precise. It doesnt use haversine formula. If this changes, change the formmula which calculates text position.
103
+ `;
104
+
105
+ // TODO: Make it precise. It doesnt use haversine formula. If this changes, change the formmula which calculates text position.
89
106
  export const circleLimpFromLongLatRadCenterCartesian3D = R + `
90
107
  vec3 circleLimpFromLongLatRadCenterCartesian3D( vec2 center, float radius, float angle) {
91
108
  vec3 geoW = longLatRadToCartesian3D(center);
@@ -99,8 +116,12 @@ vec3 circleLimpFromLongLatRadCenterCartesian3D( vec2 center, float radius, float
99
116
  float projected_radius = sin(radius_in_angle) * R / 1000.0;
100
117
  return (geoW * cos(radius_in_angle))+ tangent1 * projected_radius;
101
118
  }
102
- `;
103
- // TODO: Make it precise. Y axis is not correct.
119
+ `;
120
+
121
+
122
+
123
+ // TODO: Make it precise. Y axis is not correct.
124
+
104
125
  export const circleLimpFromLongLatRadCenterMercatorRealDistanceNew = PI + `
105
126
  vec2 circleLimpFromLongLatRadCenterMercatorRealDistance(vec2 center, float radius, float angle) {
106
127
  float ang = angle + PI / 2.0; // Shift angle to align with +x axis
@@ -119,7 +140,9 @@ vec2 circleLimpFromLongLatRadCenterMercatorRealDistance(vec2 center, float radiu
119
140
  R * longi,
120
141
  R * log(tan(PI / 4.0 + lat / 2.0))
121
142
  );
122
- }`;
143
+ }`;
144
+
145
+
123
146
  export const circleLimpFromLongLatRadCenterMercatorRealDistance = PI + `
124
147
  vec2 circleLimpFromLongLatRadCenterMercatorRealDistance(vec2 center, float radius, float angle){
125
148
  float ang = angle + PI / 2.0; // this is there because the other methods are implemented in, angle 0 is +x axis orientatation
@@ -129,8 +152,9 @@ vec2 circleLimpFromLongLatRadCenterMercatorRealDistance(vec2 center, float radiu
129
152
  float longi = center.x + atan(sin(ang) * sin(r) * cos(center.y), cos(r) - sin(center.y) * sin_lat);
130
153
  return longLatRadToMercator(vec2(longi, lat));
131
154
  }
132
- `;
133
- // TODO: reconstruct this function
155
+ `;
156
+
157
+ // TODO: reconstruct this function
134
158
  export const circleLimpFromLongLatRadCenterMercatorRealDistancePadding = `
135
159
  vec2 circleLimpFromLongLatRadCenterMercatorRealDistancePadding(vec2 center, float radius, float angle){
136
160
  float radius_radian = radius / R;
@@ -156,23 +180,31 @@ vec2 circleLimpFromLongLatRadCenterMercatorRealDistancePadding(vec2 center, floa
156
180
  float y = center_.y - new_scale * radius * sin(new_angle);
157
181
  return vec2(x, y);
158
182
  }
159
- `;
183
+ `
184
+
185
+
160
186
  export const circleLimpFromLongLatRadCenterMercatorCompass = `
161
187
  vec2 circleLimpFromLongLatRadCenterMercatorCompass(vec2 center, float radius, float angle){
162
188
  vec2 center_ = longLatRadToMercator(center);
163
189
  float y = -sin(angle) * radius + center_.y;
164
190
  float x = cos(angle) * radius + center_.x;
165
191
  return vec2(x, y);
166
- } `;
167
- // Function to convert Cartesian coordinates back to spherical (latitude, longitude)
192
+ } `;
193
+
194
+
195
+ // Function to convert Cartesian coordinates back to spherical (latitude, longitude)
168
196
  export const cartesianToSpherical = `
169
197
  vec2 cartesianToSpherical(vec3 point) {
170
198
  float lat = degrees(asin(point.z)); // Latitude
171
199
  float lon = degrees(atan(point.y, point.x)); // Longitude
172
200
 
173
201
  return vec2(lat, lon);
174
- } `;
175
- // Main function to calculate an intermediate point
202
+ } `;
203
+
204
+ // Main function to calculate an intermediate point
205
+
206
+
207
+
176
208
  export const angleBetweenTwoPointsRadian = `
177
209
  float angleBetweenTwoPointsRadian(vec2 start_, vec2 end_) {
178
210
  float start_lat = log(tan((1.0 - start_.y) * PI / 2.0));
@@ -180,7 +212,8 @@ float angleBetweenTwoPointsRadian(vec2 start_, vec2 end_) {
180
212
  float angle = atan((end_lat - start_lat) / (end_.x - start_.x));
181
213
  return angle;
182
214
  }
183
- `;
215
+ `
216
+
184
217
  export const circleCircumferenceInterPolationOf2PointsRadian = `
185
218
  float circleCircumferenceInterPolationOf2PointsRadian(vec2 center, vec2 target, float bearing_angle, float ratio) {
186
219
  vec2 t = target - center;
@@ -188,7 +221,39 @@ float circleCircumferenceInterPolationOf2PointsRadian(vec2 center, vec2 target,
188
221
  float angle = mainAngle - * ratio;
189
222
  return angle;
190
223
  }
191
- `;
224
+ `
225
+
226
+
227
+ export const slopeFromTexture = R + PI + `
228
+ float slopeFromTexture(highp sampler2DArray heightMap, vec3 uv, vec2 texelSize) {
229
+ float hL = texture(heightMap, uv - vec3(texelSize.x, 0.0, 0.0)).r;
230
+ float hR = texture(heightMap, uv + vec3(texelSize.x, 0.0, 0.0)).r;
231
+ float hD = texture(heightMap, uv - vec3(0.0, texelSize.y, 0.0)).r;
232
+ float hU = texture(heightMap, uv + vec3(0.0, texelSize.y, 0.0)).r;
233
+ float dX = (hR - hL) / (2.0 * texelSize.x);
234
+ float dY = (hU - hD) / (2.0 * texelSize.y);
235
+ float slope = sqrt(dX * dX + dY * dY);
236
+ return slope;
237
+ }
238
+ `;
239
+
240
+ export const normalFromTexture = `
241
+ vec3 normalFromTexture(highp sampler2DArray heightMap, vec3 uv, vec2 texelSize, float strength) {
242
+ float hL = texture(heightMap, uv - vec3(texelSize.x, 0.0, 0.0)).r;
243
+ float hR = texture(heightMap, uv + vec3(texelSize.x, 0.0, 0.0)).r;
244
+ float hD = texture(heightMap, uv - vec3(0.0, texelSize.y, 0.0)).r;
245
+ float hU = texture(heightMap, uv + vec3(0.0, texelSize.y, 0.0)).r;
246
+
247
+ // Calculate gradient
248
+ // Strength factor controls how "bumpy" the terrain looks
249
+ float dX = (hR - hL) * strength;
250
+ float dY = (hU - hD) * strength;
251
+
252
+ // Return normalized surface normal (-dX, -dY, 1.0)
253
+ return normalize(vec3(-dX, -dY, 1.0));
254
+ }
255
+ `;
256
+
192
257
  export const realDistanceOnSphereR1 = `
193
258
  float realDistanceOnSphereR1(vec2 longLat1, vec2 longLat2) {
194
259
  float dLat = longLat2.y - longLat1.y;
@@ -197,12 +262,59 @@ float realDistanceOnSphereR1(vec2 longLat1, vec2 longLat2) {
197
262
  float c = 2.0 * atan(sqrt(a), sqrt(1.0 - a));
198
263
  return c;
199
264
  }
200
- `;
265
+ `;
266
+
267
+
201
268
  export const isPointInBBox = `
202
269
  bool isPointInBBox(vec2 point, vec4 bbox) {
203
- return point.x + ${EPSILON} >= bbox.x && point.x <= bbox.z + ${EPSILON} && point.y + ${EPSILON} >= bbox.y && point.y <= bbox.w + ${EPSILON};
270
+ return point.x + ${EPSILON} >= bbox.x && point.x <= bbox.z + ${EPSILON}&& point.y + ${EPSILON} >= bbox.y && point.y <= bbox.w + ${EPSILON};
271
+ }
272
+ `;
273
+
274
+
275
+ export const relativeBBoxPositionRadian = `
276
+ ${PI}
277
+ ${isPointInBBox}
278
+ vec2 relativeBBoxPositionRadian(vec2 point, vec4 bbox) {
279
+ if ( bbox.z > bbox.x) {
280
+ if ( isPointInBBox(point, bbox) ) {
281
+ float x_ratio = (point.x - bbox.x) / (bbox.z - bbox.x);
282
+ float y_ratio = (point.y - bbox.y) / (bbox.w - bbox.y);
283
+ return vec2(x_ratio, y_ratio);
284
+ }
285
+ return vec2(-1.0, -1.0);
286
+ }
287
+ else {
288
+ // BBox crosses the antimeridian
289
+ if ( isPointInBBox(point, vec4(bbox.x, bbox.y, PI , bbox.w) ) ) {
290
+ float x_ratio = (point.x - bbox.x) / (PI - bbox.x);
291
+ float y_ratio = (point.y - bbox.y) / (bbox.w - bbox.y);
292
+ return vec2(x_ratio, y_ratio);
293
+ }
294
+ else if ( isPointInBBox(point, vec4(-PI, bbox.y, bbox.z, bbox.w) ) ) {
295
+ float x_ratio = (point.x + PI) / (bbox.z + PI);
296
+ float y_ratio = (point.y - bbox.y) / (bbox.w - bbox.y);
297
+ return vec2(x_ratio, y_ratio);
298
+ }
299
+ }
300
+ return vec2(-1.0, -1.0);
301
+ }
302
+ `;
303
+
304
+
305
+
306
+
307
+ export const isPointInBBox2 = `
308
+ bool isPointInBBox(vec2 point, vec4 bbox) {
309
+ float horizontal_epsilon = (bbox.z - bbox.x) * 0.05;
310
+ float vertical_epsilon = (bbox.w - bbox.y) * 0.05;
311
+ return point.x + horizontal_epsilon >= bbox.x &&
312
+ point.x <= bbox.z + horizontal_epsilon &&
313
+ point.y + vertical_epsilon >= bbox.y &&
314
+ point.y <= bbox.w + vertical_epsilon;
204
315
  }
205
- `;
316
+ `;
317
+
206
318
  const pointsOnSphereBetween = `
207
319
  vec3 pointsOnSphereBetween(vec3 a, vec3 b, float ratio) {
208
320
  // Normalize the input points to ensure they are on the unit sphere
@@ -229,13 +341,16 @@ vec3 pointsOnSphereBetween(vec3 a, vec3 b, float ratio) {
229
341
 
230
342
  // Return the normalized result to ensure it lies on the sphere
231
343
  return normalize(result);
232
- }`;
344
+ }`;
345
+
346
+
233
347
  const slerp = `
234
348
  ${pointsOnSphereBetween}
235
349
  vec3 slerp(vec3 A, vec3 B, float t) {
236
350
  return pointsOnSphereBetween(A, B, t) * mix(length(A), length(B), t);
237
351
  }
238
- `;
352
+ `
353
+
239
354
  const circleLimpFromLongLatRadCenterCartesian3D_accurate = R + `
240
355
  vec3 circleLimpFromLongLatRadCenterCartesian3D_accurate( vec3 geoW, float radius, float angle) {
241
356
  vec3 normal = normalize(geoW);
@@ -247,7 +362,9 @@ vec3 circleLimpFromLongLatRadCenterCartesian3D_accurate( vec3 geoW, float radius
247
362
  float radius_in_angle = radius/R;
248
363
  float projected_radius = sin(radius_in_angle) * R / 1000.0;
249
364
  return (geoW * cos(radius_in_angle)) + tangent1 * projected_radius;
250
- }`;
365
+ }`;
366
+
367
+
251
368
  const circleOnSphere = `
252
369
  vec3 rotateVectorAroundAxis(vec3 v, vec3 axis, float angle) {
253
370
  float c = cos(angle);
@@ -304,14 +421,16 @@ vec3 circleOnSphere(vec3 M, vec3 H, float A) {
304
421
 
305
422
  // For simplicity, returning the direct result of rotation. Assume M and H were perfectly on the sphere.
306
423
  return rotatedPoint;
307
- }`;
424
+ }`;
425
+
308
426
  const circleLimpFromLongLatRadCenterMercatorCompass_accurate = `
309
427
  vec2 circleLimpFromLongLatRadCenterMercatorCompass_accurate(vec2 center, float radius, float angle){
310
428
  float y = -sin(angle) * radius + center.y;
311
429
  float x = cos(angle) * radius + center.x;
312
430
  return vec2(x, y);
313
- } `;
314
- //TODO make it work...
431
+ } `;
432
+
433
+ //TODO make it work...
315
434
  const circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate = PI + `
316
435
  vec2 circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate(vec2 mercator_center, float radius, float angle) {
317
436
  vec2 center = vec2(mercator_center.x /6378137.0 , asin(tanh(mercator_center.y / 6378137.0 )));
@@ -335,5 +454,14 @@ vec2 circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate(vec2 mercato
335
454
  R * log(tan(PI/4.0+ center.y / 2.0))
336
455
  );
337
456
  return mercator_center - center_mercator + limp;
338
- }`;
339
- export { slerp, circleLimpFromLongLatRadCenterCartesian3D_accurate, circleLimpFromLongLatRadCenterMercatorCompass_accurate, circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate, circleOnSphere, };
457
+ }`;
458
+
459
+
460
+
461
+ export {
462
+ slerp,
463
+ circleLimpFromLongLatRadCenterCartesian3D_accurate,
464
+ circleLimpFromLongLatRadCenterMercatorCompass_accurate,
465
+ circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate,
466
+ circleOnSphere,
467
+ }
@@ -1,2 +1,2 @@
1
- export * from './geometrytransformations';
2
- export * from './nodata';
1
+ export * from './geometrytransformations';
2
+ export * from './nodata';
@@ -4,5 +4,7 @@ vec2 vertexIDtoTextureCoordinate(float id, vec2 textureDimentions) {
4
4
  float y = floor(id / textureDimentions.x);
5
5
  return vec2( x / textureDimentions.x, y / textureDimentions.y);
6
6
  }
7
- `;
8
- export { vertexIDtoTextureCoordinate };
7
+ `;
8
+
9
+
10
+ export {vertexIDtoTextureCoordinate};
@@ -1,8 +1,9 @@
1
- const permute34 = `` `vec3 permute34(vec3 x) {
1
+ const permute34 = ```vec3 permute34(vec3 x) {
2
2
  x = ((x * 34.0) + 1.0) * x;
3
3
  return x - floor(x * (1.0 / 289.0)) * 289.0;
4
- }` ``;
5
- const waveNoice = `` `float waveNoice(vec2 v)
4
+ }```;
5
+
6
+ const waveNoice = ```float waveNoice(vec2 v)
6
7
  {
7
8
  const vec4 C = vec4(0.211324865405187, 0.366025403784439, -0.577350269189626, 0.024390243902439);
8
9
 
@@ -35,7 +36,9 @@ const waveNoice = `` `float waveNoice(vec2 v)
35
36
  g.x = a0.x * x0.x + h.x * x0.y;
36
37
  g.yz = a0.yz * x12.xz + h.yz * x12.yw;
37
38
  return 130.0 * dot(m, g);
38
- }` ``;
39
- export default {
40
- permute34, waveNoice
41
- };
39
+ }```;
40
+
41
+
42
+ export default {
43
+ permute34, waveNoice
44
+ }