/**
 * Refine a broadphase ray hit against a body's true shape geometry.
 *
 * Transforms the world ray into the shape's local frame once (rotate by the
 * inverse body rotation — a unit direction stays unit, so the hit distance is
 * preserved), runs the matching canonical primitive ({@link ray_shapes}), and
 * rotates the returned local normal back to world. Spheres are
 * rotation-invariant, so they only need the translation.
 *
 * Handles the convex primitives (sphere / box / capsule). Concave shapes
 * (mesh / heightmap) and arbitrary composite convex shapes return
 * {@link RAY_REFINE_UNSUPPORTED} — the concave path is wired in separately, and
 * composites fall back to the broadphase AABB hit (no regression).
 *
 * @param {AbstractShape3D} shape
 * @param {{x:number,y:number,z:number}} position  body world position
 * @param {ArrayLike<number>} rotation  body world rotation quaternion (x,y,z,w)
 * @param {number} ox @param {number} oy @param {number} oz  ray origin (world)
 * @param {number} dx @param {number} dy @param {number} dz  ray dir (world, unit)
 * @param {number} tMax
 * @param {Float64Array|Vector3} outNormal  world surface normal, written on a
 *   finite hit
 * @returns {number} hit distance, `Infinity` on a refined miss, or
 *   {@link RAY_REFINE_UNSUPPORTED} when the shape has no exact ray test here
 */
export function refine_ray_hit(shape: AbstractShape3D, position: {
    x: number;
    y: number;
    z: number;
}, rotation: ArrayLike<number>, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, tMax: number, outNormal: Float64Array | Vector3): number;
/**
 * Sentinel returned by {@link refine_ray_hit} for a shape it has no exact ray
 * test for (composite / arbitrary convex). The caller should keep the
 * broadphase AABB result for that leaf rather than treat it as a miss.
 * Distinct from `Infinity` (a refined miss) and any finite hit distance.
 * @type {number}
 */
export const RAY_REFINE_UNSUPPORTED: number;
//# sourceMappingURL=refine_ray_hit.d.ts.map