mapspinner 0.1.51 → 0.1.52

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/gl-render.js +12 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mapspinner",
3
- "version": "0.1.51",
3
+ "version": "0.1.52",
4
4
  "description": "WebGL2 Earth-scale terrain rendering SDK for interactive globe applications",
5
5
  "main": "src/index.js",
6
6
  "exports": {
package/src/gl-render.js CHANGED
@@ -788,7 +788,12 @@ export async function initMapspinnerRender(gl, opts = {}) {
788
788
  // extends the horizon to tens of km at low altitude so near-shore relief stays in view (negligible
789
789
  // depth-precision cost: 500m vs R~6.37e6). Both the cull and the draw use this (single source).
790
790
  const RHORIZON = R - 500.0;
791
- const horizon = Math.sqrt(Math.max(0.0, camDist*camDist - RHORIZON*RHORIZON));
791
+ // UNDERWATER FAR-PLANE FIX (user 2026-06-14 'at -214m visible, at -500m it disappears'): when the
792
+ // camera is more than 500m below sea level, camDist < RHORIZON so the sea-level horizon is imaginary
793
+ // (-> 0) and alt is negative; the old max(horizon, alt*8) then collapsed the far plane to ~0 and the
794
+ // whole scene vanished past -500m deep (= the 'ocean looks shallow/empty' when exploring). Floor the
795
+ // far reach to 60km when submerged so the seabed + the underwater view stay visible.
796
+ const horizon = (camDist > RHORIZON) ? Math.sqrt(camDist*camDist - RHORIZON*RHORIZON) : 60000.0;
792
797
  // MATCH render()'s near exactly (2026-06-14 jank fix): the cull frustum must use the SAME near
793
798
  // as the draw frustum, else behind-limb/screen-AABB culling diverges from what is actually drawn
794
799
  // at the deck (cull near was max(*0.1,0.1) while render used the <2m 0.05 branch).
@@ -831,7 +836,12 @@ export async function initMapspinnerRender(gl, opts = {}) {
831
836
  // extends the horizon to tens of km at low altitude so near-shore relief stays in view (negligible
832
837
  // depth-precision cost: 500m vs R~6.37e6). Both the cull and the draw use this (single source).
833
838
  const RHORIZON = R - 500.0;
834
- const horizon = Math.sqrt(Math.max(0.0, camDist*camDist - RHORIZON*RHORIZON));
839
+ // UNDERWATER FAR-PLANE FIX (user 2026-06-14 'at -214m visible, at -500m it disappears'): when the
840
+ // camera is more than 500m below sea level, camDist < RHORIZON so the sea-level horizon is imaginary
841
+ // (-> 0) and alt is negative; the old max(horizon, alt*8) then collapsed the far plane to ~0 and the
842
+ // whole scene vanished past -500m deep (= the 'ocean looks shallow/empty' when exploring). Floor the
843
+ // far reach to 60km when submerged so the seabed + the underwater view stay visible.
844
+ const horizon = (camDist > RHORIZON) ? Math.sqrt(camDist*camDist - RHORIZON*RHORIZON) : 60000.0;
835
845
  const near = altAboveTerrain < 2.0 ? 0.05 : Math.max(altAboveTerrain * 0.1, 0.05);
836
846
  const _fBlend = Math.min(1.0, Math.max(0.0, (alt - 500000.0) / 4500000.0));
837
847
  const farGround = Math.max(horizon, alt * 8.0);