From e1095ee553456075048bf89899070fb83dd42851 Mon Sep 17 00:00:00 2001 From: German Khokhlov Date: Sun, 8 Nov 2026 00:30:36 +0400 Subject: [PATCH] Document radial pads, draped trail reveals and input options Describe the radial disc envelope, corridor backing and reveal control, rectangular input pick windows and optional horizon ellipsoid. Record the launch-pad and Transit restoration and the Street Level and CCTV callers. Explain synchronous Transit and reveal construction and surface readiness for classified ground materials after camera changes. Cesium remains the appearance and interaction reference; this documentation changes no behaviour. All eleven coupling counts remain unchanged. --- docs/CURRENT-STATE.md | 9 ++++++++ docs/GLOBE-PRIMITIVES.md | 45 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/docs/CURRENT-STATE.md b/docs/CURRENT-STATE.md index e1efcd9c3..df35b8813 100644 --- a/docs/CURRENT-STATE.md +++ b/docs/CURRENT-STATE.md @@ -218,6 +218,15 @@ one application, and only the globe-bound parts move to the next engine. engines, and `scripts/qa-ground-looks.mjs` drew the jam line and the route on Cesium as the old materials did, with no pixel changed at four moments of the pulse and the dashes. +- **Ground and input parity.** Space Missions draws its 500 m launch-pad + zone with the radial ground material: faint fill, bright soft rim and + emission, classified on terrain and tiles. Transit draws its age-banded + trail and dark backing as ground corridors. The active segment uses a + shader reveal, retaining its geometry between segment crossings. Navara + composes both in the ground pass after tone mapping. Street Level's 9 px + pick window and CCTV's custom window and drill limit go through input + subscriptions. Street Level's lowered horizon ellipsoid is a projector + option on every engine; default callers retain the WGS84 horizon. - **Shared follow and Draw.** Share links read the follow target, identity and camera pose through the engine; their saved offset uses `camera.follow`'s `swingTo` option on both engines. Cesium keeps its guarded 60-degree frame diff --git a/docs/GLOBE-PRIMITIVES.md b/docs/GLOBE-PRIMITIVES.md index 325eb25d8..4845716f2 100644 --- a/docs/GLOBE-PRIMITIVES.md +++ b/docs/GLOBE-PRIMITIVES.md @@ -90,6 +90,34 @@ Item options: - `drape` is `'both'` (the default), `'terrain'` or `'tiles'`. Cesium honours it; Navara drapes on whatever surface it draws. +Discs with a fill may use `radial: { fillAlpha, rimAlpha, rimStart, rimEnd, +emission }`. Alpha multipliers are in 0..1; the radius fractions satisfy +`0 <= rimStart < rimEnd < 1`; emission is nonnegative. The rim grows with +smoothstep between the two radii, then fades smoothly to zero at the outer +edge. Space Missions uses a 500 m disc with alpha 0.105 inside and 0.72 at +the rim, transitions at 0.952 and 0.985, and emission 0.35. Cesium retains +its textured ground material and polygon depth bias. Navara composes the +same radial envelope in its ground pass after tone mapping. + +An unpickable pixel corridor set with `reveal: true` accepts +`setReveal(fraction)` in 0..1. Each path is clipped at that fraction of its +length. Geometry stays intact: Cesium updates material uniforms and Navara +updates the corridor item texture. Hiding, showing and committing a new +path retain the fraction. A corridor may have `backing: { widthPx, color }`: +a wider edge with its own colour, with the core blended only once. + +Transit drapes its history and active head through ground corridors. Its +completed runs retain their age bands, 5 px dark backing and 3 px colour, +with band updates once per displayed second. The active head is one backed +corridor revealed along the whole current segment; only a segment crossing +rebuilds its geometry. Transit uses dynamic sets so new history and head +corridors build synchronously once Cesium's terrain bounds are available. +The ground pass handles occlusion on both engines. + +Cesium also builds reveal sets synchronously after loading those bounds. +For nonempty sets, `ready()` includes the visible globe's tile readiness: +classification needs the current surface depth as well as built geometry. + A `widthPx` corridor can also take the looks Cesium's ground polyline materials gave it. The GPU works them out every frame from the time, so a commit never rebuilds them: @@ -529,6 +557,23 @@ These appearance limits are not included in the undrawn count. ## Input ownership +`engine.input.on(type, listener, { pick, drill, pickWindow })` accepts +`pickWindow: { width, height }` with positive integer dimensions passed to +the picker. Omitted dimensions keep the engine default. Listeners share a +pick only when their windows match, and each receives its requested drill +limit. Pointer-down picks are synchronous. Moves, including drills, coalesce +to the latest position per frame. Navara clicks still use one GPU answer +from the gesture; a missing hit falls back to the requested CPU window. +Street Level requests 9 × 9 px; CCTV's gizmo requests its own window and +limit for presses and hover. Pointer ownership and removal still suppress +delivery while a pick is pending. + +`engine.projector.horizonVisible(position, { ellipsoid })` accepts a plain +ellipsoid with positive finite `radii: { x, y, z }` in metres. Without the +option it uses WGS84. Street Level supplies WGS84 radii reduced by 1,000 m +so nearby cones remain visible below sea level. The shared math is tested +against the native ellipsoidal occluder, including points near the limb. + `engine.input.suspendCameraInputs()` disables camera gestures and returns an idempotent resume function. Suspensions are counted: only the last resume restores the state captured before the first suspension. This preserves an