@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.
- package/Math/{angle-calculation.js → angle-calculation.ts} +18 -14
- package/Math/{arc-cdf-points.js → arc-cdf-points.ts} +329 -272
- package/Math/{arc-generate-points-exponantial.js → arc-generate-points-exponantial.ts} +299 -254
- package/Math/{arc.js → arc.ts} +421 -292
- package/Math/bounds/line-bbox.js +225 -186
- package/Math/{circle-cdf-points.js → circle-cdf-points.ts} +143 -78
- package/Math/{circle.js → circle.ts} +49 -33
- package/Math/{constants.js → constants.ts} +12 -4
- package/Math/contour/{quadtreecontours.js → quadtreecontours.ts} +371 -300
- package/Math/contour/quadtreecontours1.js +336 -298
- package/Math/{finite-line-2d.js → finite-line-2d.ts} +68 -58
- package/Math/haversine.ts +33 -0
- package/Math/index.js +0 -1
- package/Math/juction/{arc-plane.js → arc-plane.ts} +203 -143
- package/Math/juction/{line-sphere.js → line-sphere.ts} +32 -22
- package/Math/juction/{plane-plane.js → plane-plane.ts} +62 -53
- package/Math/{line.js → line.ts} +84 -52
- package/Math/matrix4.ts +0 -0
- package/Math/mesh/mapbox-delaunay.d.ts +74 -0
- package/Math/{methods.js → methods.ts} +182 -107
- package/Math/{plane.js → plane.ts} +92 -56
- package/Math/{quaternion.js → quaternion.ts} +128 -106
- package/Math/roadmap.md +10 -0
- package/Math/templete-shapes/{grid-visually-equal.js → grid-visually-equal.ts} +118 -65
- package/Math/tessellation/constants.ts +1 -0
- package/Math/tessellation/methods.ts +79 -0
- package/Math/tessellation/nearest-value-padding.ts +147 -0
- package/Math/tessellation/roadmap.md +48 -0
- package/Math/tessellation/spherical-triangle-area.ts +127 -0
- package/Math/tessellation/tile-merger.ts +578 -0
- package/Math/tessellation/triangle-tessellation.ts +533 -0
- package/Math/tessellation/types.ts +1 -0
- package/Math/types.ts +68 -0
- package/Math/utils.js +3 -2
- package/Math/{vec3.js → vec3.ts} +227 -151
- package/Math/xyz-tile.ts +26 -0
- package/algorithms/search-binary.js +14 -16
- package/altitude-locator/adaptors.js +0 -1
- package/altitude-locator/keymethod.js +0 -1
- package/altitude-locator/plugin.js +445 -345
- package/altitude-locator/types.js +26 -21
- package/compass-rose/compass-rose-padding-flat.js +274 -230
- package/compass-rose/{compass-text-writer.js → compass-text-writer.ts} +210 -155
- package/compass-rose/index.js +3 -3
- package/{constants.js → constants.ts} +8 -6
- package/heatwave/datamanager.js +168 -149
- package/heatwave/heatwave.js +261 -206
- package/heatwave/index.js +5 -5
- package/heatwave/isobar.js +340 -303
- package/heatwave/{texture-point-sampler.js → texture-point-sampler.ts} +220 -187
- package/investigation-tools/draw/tiles/adapters.ts +133 -0
- package/investigation-tools/draw/tiles/tiles.ts +162 -0
- package/jest.config.js +6 -7
- package/package.json +1 -1
- package/pin/pin-object-array1.js +381 -300
- package/pin/pin-point-totem1.js +77 -60
- package/programs/arrowfield/arrow-field.js +89 -60
- package/programs/arrowfield/logic.js +173 -141
- package/programs/data2legend/density-to-legend.js +86 -68
- package/programs/data2legend/point-to-density-texture.js +84 -67
- package/programs/float2legendwithratio/index.js +3 -2
- package/programs/float2legendwithratio/logic.js +144 -118
- package/programs/float2legendwithratio/object.js +141 -104
- package/programs/helpers/blender.js +73 -58
- package/programs/helpers/{fadeaway.js → fadeaway.ts} +73 -55
- package/programs/index.js +19 -20
- package/programs/line-on-globe/circle-accurate-3d.js +112 -85
- package/programs/line-on-globe/circle-accurate-flat.js +200 -148
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +134 -102
- package/programs/line-on-globe/index.js +0 -1
- package/programs/line-on-globe/lines-color-instanced-flat.js +99 -80
- package/programs/line-on-globe/linestrip/data.ts +29 -0
- package/programs/line-on-globe/linestrip/{linestrip.js → linestrip.ts} +152 -93
- package/programs/line-on-globe/{naive-accurate-flexible.js → naive-accurate-flexible.ts} +175 -126
- package/programs/line-on-globe/util.js +8 -5
- package/programs/picking/pickable-polygon-renderer.js +129 -98
- package/programs/picking/pickable-renderer.js +130 -98
- package/programs/point-on-globe/element-globe-surface-glow.js +122 -93
- package/programs/point-on-globe/element-point-glow.js +114 -80
- package/programs/point-on-globe/square-pixel-point.js +139 -120
- package/programs/polygon-on-globe/roadmap.md +8 -0
- package/programs/polygon-on-globe/texture-dem-triangles.ts +290 -0
- package/programs/{programcache.js → programcache.ts} +134 -126
- package/programs/rings/index.js +1 -1
- package/programs/rings/partial-ring/{piece-of-pie.js → piece-of-pie.ts} +222 -152
- package/programs/totems/camera-totem-attactment-interface.ts +4 -0
- package/programs/totems/{camerauniformblock.js → camerauniformblock.ts} +326 -230
- package/programs/totems/{canvas-webglobe-info.js → canvas-webglobe-info.ts} +147 -132
- package/programs/totems/dem-textures-manager.ts +368 -0
- package/programs/totems/{globe-changes.js → globe-changes.ts} +79 -59
- package/programs/totems/gpu-selection-uniform-block.js +127 -99
- package/programs/totems/{index.js → index.ts} +2 -2
- package/programs/two-d/pixel-padding-for-compass.js +101 -87
- package/programs/util.js +19 -14
- package/programs/vectorfields/logics/{constants.js → constants.ts} +5 -4
- package/programs/vectorfields/logics/drawrectangleparticles.ts +182 -0
- package/programs/vectorfields/logics/index.js +4 -2
- package/programs/vectorfields/logics/particle-ubo.ts +23 -0
- package/programs/vectorfields/logics/{pixelbased.js → pixelbased.ts} +119 -84
- package/programs/vectorfields/logics/ubo.js +57 -51
- package/programs/vectorfields/{pingpongbuffermanager.js → pingpongbuffermanager.ts} +113 -73
- package/publish.bat +62 -0
- package/range-tools-on-terrain/bearing-line/{adapters.js → adapters.ts} +154 -114
- package/range-tools-on-terrain/bearing-line/{plugin.js → plugin.ts} +569 -457
- package/range-tools-on-terrain/bearing-line/types.ts +65 -0
- package/range-tools-on-terrain/circle-line-chain/{adapters.js → adapters.ts} +104 -85
- package/range-tools-on-terrain/circle-line-chain/{chain-list-map.js → chain-list-map.ts} +446 -382
- package/range-tools-on-terrain/circle-line-chain/{plugin.js → plugin.ts} +607 -464
- package/range-tools-on-terrain/circle-line-chain/types.ts +43 -0
- package/range-tools-on-terrain/range-ring/{adapters.js → adapters.ts} +114 -93
- package/range-tools-on-terrain/range-ring/{enum.js → enum.ts} +2 -2
- package/range-tools-on-terrain/range-ring/{plugin.js → plugin.ts} +444 -377
- package/range-tools-on-terrain/range-ring/rangeringangletext.ts +396 -0
- package/range-tools-on-terrain/range-ring/types.ts +30 -0
- package/semiplugins/interface.ts +14 -0
- package/semiplugins/lightweight/{line-plugin.js → line-plugin.ts} +342 -221
- package/semiplugins/lightweight/{piece-of-pie-plugin.js → piece-of-pie-plugin.ts} +275 -200
- package/semiplugins/shape-on-terrain/{arc-plugin.js → arc-plugin.ts} +616 -472
- package/semiplugins/shape-on-terrain/{circle-plugin.js → circle-plugin.ts} +588 -444
- package/semiplugins/shape-on-terrain/goal.md +12 -0
- package/semiplugins/shape-on-terrain/{padding-1-degree.js → padding-1-degree.ts} +713 -539
- package/semiplugins/shape-on-terrain/terrain-polygon/adapters.ts +69 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/cache-shortcuts.md +20 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/cache.ts +149 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/index-polygon-map.ts +58 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/manager.ts +4 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +196 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.ts +209 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.ts +144 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/random.ts +165 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/readme.md +5 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/types.ts +37 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/worker-contact.ts +81 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +146 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/notes.md +90 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/terrain-polygon.ts +265 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/types.ts +69 -0
- package/semiplugins/shell/bbox-renderer/index.ts +2 -0
- package/semiplugins/shell/bbox-renderer/{logic.js → logic.ts} +273 -249
- package/semiplugins/shell/bbox-renderer/object.ts +129 -0
- package/semiplugins/type.ts +8 -0
- package/semiplugins/utility/{container-plugin.js → container-plugin.ts} +126 -94
- package/semiplugins/utility/{object-pass-container-plugin.js → object-pass-container-plugin.ts} +101 -80
- package/shaders/fragment-toy/firework.js +1 -1
- package/shaders/fragment-toy/singularity.js +5 -2
- package/terrain-plugin.mmd +83 -0
- package/tests/Math/arc-sampling-test.js +367 -0
- package/tests/Math/arc-sampling-test.ts +429 -0
- package/tests/Math/arc.test.ts +77 -0
- package/tests/Math/junction/arc-limit.test.ts +7 -0
- package/tests/Math/junction/arc-plane-points.test.ts +196 -0
- package/tests/Math/junction/arc-plane.test.ts +172 -0
- package/tests/Math/junction/line-sphere.test.ts +127 -0
- package/tests/Math/junction/plane-plane.test.ts +91 -0
- package/tests/Math/plane-test.ts +17 -0
- package/tests/Math/plane.test.ts +43 -0
- package/tests/Math/vec3.test.ts +33 -0
- package/tracks/point-heat-map/adaptors/timetracksplugin-format-to-this.js +78 -63
- package/tracks/point-heat-map/index.js +0 -1
- package/tracks/point-heat-map/plugin-webworker.js +148 -121
- package/tracks/point-heat-map/point-to-heat-map-flow.js +150 -121
- package/tracks/point-heat-map/readme.md +15 -0
- package/tracks/point-tracks/key-methods.js +3 -2
- package/tracks/point-tracks/plugin.js +487 -393
- package/tracks/timetracks/adaptors-line-strip.js +79 -65
- package/tracks/timetracks/plugin-line-strip.js +295 -240
- package/tracks/timetracks/program-line-strip.js +495 -411
- package/tracks/timetracks/programpoint-line-strip.js +137 -109
- package/tracks/timetracks/readme.md +1 -0
- package/tsconfig.json +22 -0
- package/types/@pirireis/webglobe.d.ts +102 -0
- package/types/delaunator.d.ts +40 -0
- package/types/earcut.d.ts +11 -0
- package/types/rbush.d.ts +57 -0
- package/types.ts +319 -0
- package/util/account/bufferoffsetmanager.js +209 -176
- package/util/account/create-buffermap-orchastration.ts +85 -0
- package/util/account/index.js +6 -3
- package/util/account/single-attribute-buffer-management/{buffer-manager.js → buffer-manager.ts} +151 -117
- package/util/account/single-attribute-buffer-management/{buffer-orchestrator.js → buffer-orchestrator.ts} +238 -212
- package/util/account/single-attribute-buffer-management/{buffer-orchestrator1.js → buffer-orchestrator1.ts} +184 -159
- package/util/account/single-attribute-buffer-management/{index.js → index.ts} +11 -4
- package/util/account/single-attribute-buffer-management/{object-store.js → object-store.ts} +76 -55
- package/util/account/single-attribute-buffer-management/types.ts +43 -0
- package/util/account/util.js +22 -18
- package/util/algorithms/index.js +0 -1
- package/util/algorithms/search-binary.js +26 -25
- package/util/build-strategy/{static-dynamic.js → static-dynamic.ts} +50 -41
- package/util/check/index.js +0 -1
- package/util/check/typecheck.ts +74 -0
- package/util/{frame-counter-trigger.js → frame-counter-trigger.ts} +99 -84
- package/util/geometry/{index.js → index.ts} +155 -121
- package/util/gl-util/buffer/{attribute-loader.js → attribute-loader.ts} +84 -62
- package/util/gl-util/buffer/{index.js → index.ts} +6 -3
- package/util/gl-util/draw-options/{methods.js → methods.ts} +47 -32
- package/util/gl-util/uniform-block/{manager.js → manager.ts} +232 -190
- package/util/{webglobe/gldefaultstates.js → globe-default-gl-states.ts} +5 -4
- package/util/helper-methods.ts +9 -0
- package/util/index.js +9 -10
- package/util/interpolation/index.js +0 -1
- package/util/interpolation/timetrack/index.js +9 -2
- package/util/interpolation/timetrack/timetrack-interpolator.js +94 -79
- package/util/interpolation/timetrack/web-worker.js +51 -46
- package/util/picking/{fence.js → fence.ts} +47 -41
- package/util/picking/picker-displayer.ts +226 -0
- package/util/programs/draw-from-pixel-coords.js +201 -164
- package/util/programs/{draw-texture-on-canvas.js → draw-texture-on-canvas.ts} +92 -67
- package/util/programs/supersampletotextures.js +130 -97
- package/util/programs/texturetoglobe.js +153 -128
- package/util/shaderfunctions/{geometrytransformations.js → geometrytransformations.ts} +169 -41
- package/util/shaderfunctions/index.js +2 -2
- package/util/shaderfunctions/nodata.js +4 -2
- package/util/shaderfunctions/noisefunctions.js +10 -7
- package/util/{webglobjectbuilders.js → webglobjectbuilders.ts} +446 -358
- package/vectorfield/arrowfield/adaptor.js +11 -11
- package/vectorfield/arrowfield/index.js +3 -3
- package/vectorfield/arrowfield/plugin.js +128 -83
- package/vectorfield/waveparticles/adaptor.js +16 -15
- package/vectorfield/waveparticles/index.js +3 -3
- package/vectorfield/waveparticles/plugin.ts +506 -0
- package/vectorfield/wind/adapters/image-to-fields.ts +74 -0
- package/vectorfield/wind/adapters/types.ts +12 -0
- package/vectorfield/wind/{imagetovectorfieldandmagnitude.js → imagetovectorfieldandmagnitude.ts} +78 -56
- package/vectorfield/wind/index.js +5 -5
- package/vectorfield/wind/plugin-persistant copy.ts +461 -0
- package/vectorfield/wind/plugin-persistant.ts +483 -0
- package/vectorfield/wind/plugin.js +883 -671
- package/vectorfield/wind/vectorfieldimage.js +27 -23
- package/write-text/{context-text-bulk.js → context-text-bulk.ts} +285 -200
- package/write-text/context-text3.ts +252 -0
- package/write-text/{context-text4.js → context-text4.ts} +231 -145
- package/write-text/context-textDELETE.js +125 -94
- package/write-text/objectarraylabels/{index.js → index.ts} +2 -2
- package/write-text/objectarraylabels/objectarraylabels.d.ts +72 -0
- package/write-text/objectarraylabels/objectarraylabels.js +247 -200
- package/Math/matrix4.js +0 -1
- package/Math/tessellation/earcut/adapters.js +0 -37
- package/Math/tessellation/hybrid-triangle-tessellation-meta.js +0 -123
- package/Math/tessellation/methods.js +0 -46
- package/Math/tessellation/shred-input.js +0 -18
- package/Math/tessellation/tile-merger.js +0 -56
- package/Math/tessellation/tiler.js +0 -50
- package/Math/tessellation/triangle-tessellation-meta.js +0 -516
- package/Math/tessellation/triangle-tessellation.js +0 -14
- package/Math/tessellation/types.js +0 -1
- package/Math/tessellation/zoom-catch.js +0 -1
- package/Math/types.js +0 -1
- package/programs/line-on-globe/linestrip/data.js +0 -4
- package/programs/polygon-on-globe/partial-tesselation.js +0 -1
- package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +0 -204
- package/programs/polygon-on-globe/texture-dem-triangle-test-plugin.js +0 -118
- package/programs/polygon-on-globe/texture-dem-triangles.js +0 -236
- package/programs/vectorfields/logics/drawrectangleparticles.js +0 -112
- package/programs/vectorfields/logics/ubo-new.js +0 -25
- package/range-tools-on-terrain/bearing-line/types.js +0 -1
- package/range-tools-on-terrain/circle-line-chain/types.js +0 -1
- package/range-tools-on-terrain/range-ring/rangeringangletext.js +0 -331
- package/range-tools-on-terrain/range-ring/types.js +0 -9
- package/semiplugins/interface.js +0 -1
- package/semiplugins/shape-on-terrain/terrain-cover/texture-dem-cover.js +0 -1
- package/semiplugins/shell/bbox-renderer/index.js +0 -2
- package/semiplugins/shell/bbox-renderer/object.js +0 -65
- package/semiplugins/type.js +0 -1
- package/types.js +0 -19
- package/util/account/create-buffermap-orchastration.js +0 -39
- package/util/account/single-attribute-buffer-management/types.js +0 -1
- package/util/check/typecheck.js +0 -66
- package/util/gl-util/uniform-block/types.js +0 -1
- package/util/picking/picker-displayer.js +0 -134
- package/util/webglobe/index.js +0 -2
- package/util/webglobe/rasteroverlay.js +0 -76
- package/vectorfield/waveparticles/plugin.js +0 -290
- package/write-text/attached-text-writer.js +0 -95
- package/write-text/context-text3.js +0 -167
|
@@ -1,32 +1,39 @@
|
|
|
1
|
-
// Z in kolometers
|
|
2
|
-
//
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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}
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
7
|
+
`;
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
export {vertexIDtoTextureCoordinate};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
const permute34 =
|
|
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
|
-
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
}```;
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
export default {
|
|
43
|
+
permute34, waveNoice
|
|
44
|
+
}
|