webxr.d.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. type XRSessionMode =
  2. | "inline"
  3. | "immersive-vr"
  4. | "immersive-ar";
  5. type XRReferenceSpaceType =
  6. | "viewer"
  7. | "local"
  8. | "local-floor"
  9. | "bounded-floor"
  10. | "unbounded";
  11. type XREnvironmentBlendMode =
  12. | "opaque"
  13. | "additive"
  14. | "alpha-blend";
  15. type XRVisibilityState =
  16. | "visible"
  17. | "visible-blurred"
  18. | "hidden";
  19. type XRHandedness =
  20. | "none"
  21. | "left"
  22. | "right";
  23. type XRTargetRayMode =
  24. | "gaze"
  25. | "tracked-pointer"
  26. | "screen";
  27. type XREye =
  28. | "none"
  29. | "left"
  30. | "right";
  31. interface XRSpace extends EventTarget {
  32. }
  33. interface XRRenderState {
  34. depthNear?: number;
  35. depthFar?: number;
  36. inlineVerticalFieldOfView?: number;
  37. baseLayer?: XRWebGLLayer;
  38. }
  39. interface XRInputSource {
  40. handedness: XRHandedness;
  41. targetRayMode: XRTargetRayMode;
  42. targetRaySpace: XRSpace;
  43. gripSpace: XRSpace | undefined;
  44. gamepad: Gamepad | undefined;
  45. profiles: Array<string>;
  46. }
  47. interface XRSession extends XRAnchorCreator {
  48. addEventListener: Function;
  49. removeEventListener: Function;
  50. requestReferenceSpace(type: XRReferenceSpaceType): Promise<XRReferenceSpace>;
  51. updateRenderState(XRRenderStateInit: XRRenderState): Promise<void>;
  52. requestAnimationFrame: Function;
  53. end(): Promise<void>;
  54. renderState: XRRenderState;
  55. inputSources: Array<XRInputSource>;
  56. // AR hit test
  57. requestHitTest(ray: XRRay, referenceSpace: XRReferenceSpace): Promise<XRHitResult[]>;
  58. updateWorldTrackingState(options: {
  59. planeDetectionState?: { enabled: boolean; }
  60. }): void;
  61. }
  62. interface XRReferenceSpace extends XRSpace {
  63. getOffsetReferenceSpace(originOffset: XRRigidTransform): XRReferenceSpace;
  64. onreset: any;
  65. }
  66. type XRPlaneSet = Set<XRPlane>;
  67. type XRAnchorSet = Set<XRAnchor>;
  68. interface XRFrame {
  69. session: XRSession;
  70. getViewerPose(referenceSpace: XRReferenceSpace): XRViewerPose | undefined;
  71. getPose(space: XRSpace, baseSpace: XRSpace): XRPose | undefined;
  72. // Anchors
  73. trackedAnchors?: XRAnchorSet;
  74. // Planes
  75. worldInformation: {
  76. detectedPlanes?: XRPlaneSet;
  77. };
  78. }
  79. interface XRViewerPose extends XRPose {
  80. views: Array<XRView>;
  81. }
  82. interface XRPose {
  83. transform: XRRigidTransform;
  84. emulatedPosition: boolean;
  85. }
  86. interface XRWebGLLayerOptions {
  87. antialias?: boolean;
  88. depth?: boolean;
  89. stencil?: boolean;
  90. alpha?: boolean;
  91. multiview?: boolean;
  92. framebufferScaleFactor?: number;
  93. }
  94. declare var XRWebGLLayer: {
  95. prototype: XRWebGLLayer;
  96. new(session: XRSession, context: WebGLRenderingContext | undefined, options?: XRWebGLLayerOptions): XRWebGLLayer;
  97. };
  98. interface XRWebGLLayer {
  99. framebuffer: WebGLFramebuffer;
  100. framebufferWidth: number;
  101. framebufferHeight: number;
  102. getViewport: Function;
  103. }
  104. declare class XRRigidTransform {
  105. constructor(matrix: Float32Array);
  106. position: DOMPointReadOnly;
  107. orientation: DOMPointReadOnly;
  108. matrix: Float32Array;
  109. inverse: XRRigidTransform;
  110. }
  111. interface XRView {
  112. eye: XREye;
  113. projectionMatrix: Float32Array;
  114. transform: XRRigidTransform;
  115. }
  116. interface XRInputSourceChangeEvent {
  117. session: XRSession;
  118. removed: Array<XRInputSource>;
  119. added: Array<XRInputSource>;
  120. }
  121. interface XRInputSourceEvent extends Event {
  122. readonly frame: XRFrame;
  123. readonly inputSource: XRInputSource;
  124. }
  125. // Experimental(er) features
  126. declare class XRRay {
  127. constructor(transformOrOrigin: XRRigidTransform | DOMPointReadOnly, direction?: DOMPointReadOnly);
  128. origin: DOMPointReadOnly;
  129. direction: DOMPointReadOnly;
  130. matrix: Float32Array;
  131. }
  132. interface XRHitResult {
  133. hitMatrix: Float32Array;
  134. }
  135. interface XRAnchor {
  136. // remove?
  137. id?: string;
  138. anchorSpace: XRSpace;
  139. lastChangedTime: number;
  140. detach(): void;
  141. }
  142. interface XRPlane extends XRAnchorCreator {
  143. orientation: "Horizontal" | "Vertical";
  144. planeSpace: XRSpace;
  145. polygon: Array<DOMPointReadOnly>;
  146. lastChangedTime: number;
  147. }
  148. interface XRAnchorCreator {
  149. // AR Anchors
  150. createAnchor(pose: XRPose | XRRigidTransform, referenceSpace: XRReferenceSpace): Promise<XRAnchor>;
  151. }