import { Vec3 } from 'playcanvas';
/**
 * Parameters describing a pinhole camera for headless splat rendering.
 *
 * Convention: PlayCanvas right-handed, Y-up world. Camera-space axes are
 * `right` (image x increases), `down` (image y increases), `forward`
 * (positive depth in front of the camera). The basis is built from a
 * `target - eye` direction plus a world-up vector and assumes the camera
 * looks roughly opposite the world up's perpendicular plane in a
 * PlayCanvas-style scene (so e.g. camera at +Z looking at the origin
 * places world `+X` on the right of the image).
 */
type RenderCamera = {
    /** Camera position in world space. */
    position: Vec3;
    /** Point the camera looks at, in world space. */
    target: Vec3;
    /** World-space up vector (used to define camera roll). */
    up: Vec3;
    /** Vertical field of view in radians. */
    fovY: number;
    /** Output image width in pixels. */
    width: number;
    /** Output image height in pixels. */
    height: number;
    /** Near clipping distance in world units. Splats with depth <= near are culled. */
    near: number;
};
/**
 * Derived camera basis and intrinsics in the conventions described on
 * RenderCamera. The 3x3 view rotation rows are (right, down, forward); the
 * translation is -R * eye. Focal lengths are in pixel units.
 */
type CameraBasis = {
    /** Eye position (copy of camera.position). */
    eye: Vec3;
    /** Camera-space +X axis in world coords (rightward in image). */
    right: Vec3;
    /** Camera-space +Y axis in world coords (downward in image). */
    down: Vec3;
    /** Camera-space +Z axis in world coords (into the scene). */
    forward: Vec3;
    /** Horizontal focal length in pixels. */
    focalX: number;
    /** Vertical focal length in pixels. */
    focalY: number;
};
declare const buildCameraBasis: (camera: RenderCamera) => CameraBasis;
export { type RenderCamera, type CameraBasis, buildCameraBasis };
