import type { FieldVec3 } from '@forgeax/engine-types'; export type QueryTriangle = readonly [FieldVec3, FieldVec3, FieldVec3]; export interface TriangleRayHit { primitive: number; distance: number; frontFace: boolean; } /** Shared work allowance for a build batch; exhausted queries never become misses. */ export interface TriangleQueryBudget { remaining: number; } /** Exact squared distance, including segment/point degeneracies. */ export declare function triangleDistanceSquared(p: FieldVec3, triangle: QueryTriangle): number; /** * Build-time acceleration over validated producer-owned triangles. No source * arrays are mutated. The producer must retain its immutable input until done. * Closest-point and multi-hit ray callers share this one spatial index. */ export declare function createTriangleQuery(triangles: readonly QueryTriangle[]): { nodeCount: number; /** Returns null on primitive-test exhaustion; a partial nearest value is not a distance bound. */ nearestSquared(p: FieldVec3, maxDistance?: number, budget?: TriangleQueryBudget): number | null; /** Ray parameter distances. False leaves out unchanged; null is exhausted, not a miss. */ trace(out: TriangleRayHit, origin: FieldVec3, direction: FieldVec3, tMin: number, tMax: number, budget?: TriangleQueryBudget): boolean | null; }; //# sourceMappingURL=triangle-query.d.ts.map