import * as THREE from 'three'; import { type BodyHoverConfig } from '../../config/render'; /** * Runtime handle returned by {@link buildBodyHoverOverlay}. Controls the * visibility of the selection ring and releases its GPU resources. */ export interface BodyHoverOverlay { /** * Underlying ring mesh. Exposed so the body's `warmup` can include the * overlay shader in its compile pass; the mesh is mounted in the body * group at construction time, callers should not re-parent it. */ mesh: THREE.Mesh; /** Show or hide the ring. */ setVisible(visible: boolean): void; /** Remove mesh from parent group and release GPU resources. */ dispose(): void; } /** * Builds a selection ring for a celestial body that matches the sphere's * perspective-projected silhouette exactly. * * The ring is placed on the sphere's silhouette plane each frame: * - Center: sphere_center + shift toward camera = P*(1 - r²/d²) * - Radius: r * sqrt(1 - r²/d²) * - Normal: camera→sphere direction * * This makes the ring distort identically to the sphere mesh under perspective * projection, eliminating any shape/position mismatch. * * `cfg.ringMarginPx` and `cfg.ringWidthPx` remain constant in screen pixels * at any zoom level. * * @param group - The body's THREE.Group. * @param radius - Body radius in world units. * @param cfg - Visual parameters. */ export declare function buildBodyHoverOverlay(group: THREE.Group, radius: number, cfg?: BodyHoverConfig): BodyHoverOverlay; //# sourceMappingURL=buildBodyHoverOverlay.d.ts.map