@sparkjsdev/spark
Version:
An advanced 3D Gaussian Splatting renderer for THREE.js
249 lines (248 loc) • 8.2 kB
TypeScript
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<void>;
onEnterXr?: () => void | Promise<void>;
onExitXr?: () => void | Promise<void>;
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<void>;
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<ArrayBuffer> | 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 {};