import type { Vector3 } from '@holoscript/core'; /** * OcclusionCulling.ts * * Visibility determination: frustum culling, AABB tests, * portal-based occlusion, and query batching. * * @module world */ export interface AABB { min: Vector3; max: Vector3; } export interface FrustumPlane { normal: Vector3; distance: number; } export interface CullableObject { id: string; bounds: AABB; visible: boolean; lastTestFrame: number; layer: number; } export interface OcclusionPortal { id: string; bounds: AABB; connectedZones: [string, string]; open: boolean; } export interface OcclusionZone { id: string; bounds: AABB; objects: string[]; } export declare class OcclusionCulling { private objects; private zones; private portals; private frustumPlanes; private currentFrame; private visibleCount; private culledCount; private layerMask; register(id: string, bounds: AABB, layer?: number): CullableObject; unregister(id: string): boolean; updateBounds(id: string, bounds: AABB): void; addZone(id: string, bounds: AABB, objectIds?: string[]): void; addPortal(id: string, bounds: AABB, zone1: string, zone2: string): void; setPortalOpen(id: string, open: boolean): void; setFrustum(planes: FrustumPlane[]): void; setLayerMask(mask: number): void; performCulling(): void; private isInFrustum; testAABBOverlap(a: AABB, b: AABB): boolean; queryRegion(region: AABB): CullableObject[]; getVisibleZones(startZone: string): string[]; getVisibleObjects(): CullableObject[]; getVisibleCount(): number; getCulledCount(): number; getTotalCount(): number; getCullRatio(): number; getCurrentFrame(): number; } //# sourceMappingURL=OcclusionCulling.d.ts.map