import { SplatMesh } from './SplatMesh'; import * as THREE from "three"; export interface SparkXrOptions { renderer: THREE.WebGLRenderer; element?: HTMLElement; elementId?: string; button?: boolean | SparkXrButton; onMouseLeaveOpacity?: number; mode?: "vr" | "ar" | "arvr" | "vrar"; fixedFoveation?: number; frameBufferScaleFactor?: number; referenceSpaceType?: "local" | "local-floor" | "unbounded" | "viewer"; enableHands?: boolean; allowMobileXr?: boolean; sessionInit?: XRSessionInit; onReady?: (supported: boolean) => void | Promise; onEnterXr?: () => void | Promise; onExitXr?: () => void | Promise; controllers?: SparkXrControllers; } export interface SparkXrButton { enterXrHtml?: string; exitXrHtml?: string; enterVrHtml?: string; exitVrHtml?: string; enterArHtml?: string; exitArHtml?: string; enterXrText?: string; exitXrText?: string; enterVrText?: string; exitVrText?: string; enterArText?: string; exitArText?: string; style?: CSSStyleDeclaration; enterStyle?: CSSStyleDeclaration; exitStyle?: CSSStyleDeclaration; zIndex?: number; } export type XrGamepads = { left?: Gamepad; right?: Gamepad; leftIsHand?: boolean; rightIsHand?: boolean; }; export interface SparkXrControllers { moveSpeed?: number; rotateSpeed?: number; rollSpeed?: number; fastMultiplier?: number; slowMultiplier?: number; moveHeading?: boolean; moveDirection?: boolean; getMove?: (gamepads: XrGamepads, sparkXr: SparkXr) => THREE.Vector3; getRotate?: (gamepads: XrGamepads, sparkXr: SparkXr) => THREE.Vector3; getFast?: (gamepads: XrGamepads, sparkXr: SparkXr) => boolean; getSlow?: (gamepads: XrGamepads, sparkXr: SparkXr) => boolean; } export declare const DEFAULT_CONTROLLER_MOVE_SPEED = 1; export declare const DEFAULT_CONTROLLER_ROTATE_SPEED = 4; export declare const DEFAULT_CONTROLLER_ROLL_SPEED = 2; export declare const DEFAULT_CONTROLLER_FAST_MULTIPLIER = 5; export declare const DEFAULT_CONTROLLER_SLOW_MULTIPLIER: number; export declare const DEFAULT_CONTROLLER_MOVE_HEADING = false; export declare const DEFAULT_CONTROLLER_GETMOVE: (gamepads: XrGamepads, sparkXr: SparkXr) => THREE.Vector3; export declare const DEFAULT_CONTROLLER_GETROTATE: (gamepads: XrGamepads, sparkXr: SparkXr) => THREE.Vector3; export declare const DEFAULT_CONTROLLER_GETFAST: (gamepads: XrGamepads, sparkXr: SparkXr) => boolean; export declare const DEFAULT_CONTROLLER_GETSLOW: (gamepads: XrGamepads, sparkXr: SparkXr) => boolean; export declare enum JointEnum { w = "wrist", t0 = "thumb-metacarpal", t1 = "thumb-phalanx-proximal", t2 = "thumb-phalanx-distal", t3 = "thumb-tip", i0 = "index-finger-metacarpal", i1 = "index-finger-phalanx-proximal", i2 = "index-finger-phalanx-intermediate", i3 = "index-finger-phalanx-distal", i4 = "index-finger-tip", m0 = "middle-finger-metacarpal", m1 = "middle-finger-phalanx-proximal", m2 = "middle-finger-phalanx-intermediate", m3 = "middle-finger-phalanx-distal", m4 = "middle-finger-tip", r0 = "ring-finger-metacarpal", r1 = "ring-finger-phalanx-proximal", r2 = "ring-finger-phalanx-intermediate", r3 = "ring-finger-phalanx-distal", r4 = "ring-finger-tip", p0 = "pinky-finger-metacarpal", p1 = "pinky-finger-phalanx-proximal", p2 = "pinky-finger-phalanx-intermediate", p3 = "pinky-finger-phalanx-distal", p4 = "pinky-finger-tip" } export type JointId = keyof typeof JointEnum; export declare const JOINT_IDS: JointId[]; export declare const NUM_JOINTS: number; export declare const JOINT_INDEX: { [key in JointId]: number; }; export declare const JOINT_RADIUS: { [key in JointId]: number; }; export declare const JOINT_SEGMENTS: JointId[][]; export declare const JOINT_SEGMENT_STEPS: number[][]; export declare const JOINT_TIPS: JointId[]; export declare const FINGER_TIPS: JointId[]; export declare enum Hand { left = "left", right = "right" } export declare const HANDS: Hand[]; export type Joint = { position: THREE.Vector3; quaternion: THREE.Quaternion; radius: number; }; export type HandJoints = { [key in JointId]?: Joint; }; export declare class SparkXr { renderer: THREE.WebGLRenderer; xr?: XRSystem; element?: HTMLElement; button?: SparkXrButton; mode: XRSessionMode | "initializing" | "not_supported"; sessionInit?: XRSessionInit; session?: XRSession; onEnterXr?: () => void; onExitXr?: () => void; controllers?: SparkXrControllers; lastControllersUpdate: number; enableHands: boolean; hands: XrHand[]; constructor(options: SparkXrOptions); private initializeXr; toggleXr(): Promise; private updateElement; private static createButton; xrSupported(): boolean; static JointEnum: typeof JointEnum; static JOINT_IDS: ("w" | "t0" | "t1" | "t2" | "t3" | "i0" | "i1" | "i2" | "i3" | "i4" | "m0" | "m1" | "m2" | "m3" | "m4" | "r0" | "r1" | "r2" | "r3" | "r4" | "p0" | "p1" | "p2" | "p3" | "p4")[]; static NUM_JOINTS: number; static JOINT_INDEX: { w: number; t0: number; t1: number; t2: number; t3: number; i0: number; i1: number; i2: number; i3: number; i4: number; m0: number; m1: number; m2: number; m3: number; m4: number; r0: number; r1: number; r2: number; r3: number; r4: number; p0: number; p1: number; p2: number; p3: number; p4: number; }; static JOINT_RADIUS: { w: number; t0: number; t1: number; t2: number; t3: number; i0: number; i1: number; i2: number; i3: number; i4: number; m0: number; m1: number; m2: number; m3: number; m4: number; r0: number; r1: number; r2: number; r3: number; r4: number; p0: number; p1: number; p2: number; p3: number; p4: number; }; static JOINT_SEGMENTS: ("w" | "t0" | "t1" | "t2" | "t3" | "i0" | "i1" | "i2" | "i3" | "i4" | "m0" | "m1" | "m2" | "m3" | "m4" | "r0" | "r1" | "r2" | "r3" | "r4" | "p0" | "p1" | "p2" | "p3" | "p4")[][]; static JOINT_SEGMENT_STEPS: number[][]; static JOINT_TIPS: ("w" | "t0" | "t1" | "t2" | "t3" | "i0" | "i1" | "i2" | "i3" | "i4" | "m0" | "m1" | "m2" | "m3" | "m4" | "r0" | "r1" | "r2" | "r3" | "r4" | "p0" | "p1" | "p2" | "p3" | "p4")[]; static FINGER_TIPS: ("w" | "t0" | "t1" | "t2" | "t3" | "i0" | "i1" | "i2" | "i3" | "i4" | "m0" | "m1" | "m2" | "m3" | "m4" | "r0" | "r1" | "r2" | "r3" | "r4" | "p0" | "p1" | "p2" | "p3" | "p4")[]; static Hand: typeof Hand; static HANDS: Hand[]; left(): XrHand; right(): XrHand; updateControllers(camera: THREE.Camera): void; updateHands({ xrFrame }: { xrFrame: XRFrame; }): void; makeJointSplats(hand: Hand): JointSplats; snapshotHands(time: number): { time: number; hands: (HandSnapshot | undefined)[]; }; } type JointSnapshot = { pos: number[]; quat: number[]; radius: number; }; type HandSnapshot = { [key in JointId]?: JointSnapshot; }; type HandsSnapshot = { time: number; hands: (HandSnapshot | undefined)[]; }; export declare function lerpHandsSnapshots(snapshots: HandsSnapshot[], time: number): HandsSnapshot | null; export declare class XrHand { hand: Hand; joints?: HandJoints; lastJoints?: HandJoints; constructor(hand: Hand); static newFromSnapshot(hand: Hand, snapshot: HandSnapshot): XrHand; valid(): boolean; snapshotJoints(): HandSnapshot | undefined; toFlatArray(): Float32Array | undefined; } export declare class JointSplats extends SplatMesh { hand: Hand; constructor(hand: Hand); private scratchCenter; private scratchQuat; private scratchScales; private scratchColor; updateJoints(joints?: HandJoints): void; } export {};