webxr.d.ts 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  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. type XREventType =
  32. | "devicechange"
  33. | "visibilitychange"
  34. | "end"
  35. | "inputsourceschange"
  36. | "select"
  37. | "selectstart"
  38. | "selectend"
  39. | "squeeze"
  40. | "squeezestart"
  41. | "squeezeend"
  42. | "reset";
  43. interface XRSpace extends EventTarget {
  44. }
  45. interface XRRenderState {
  46. depthNear?: number;
  47. depthFar?: number;
  48. inlineVerticalFieldOfView?: number;
  49. baseLayer?: XRWebGLLayer;
  50. }
  51. interface XRInputSource {
  52. handedness: XRHandedness;
  53. targetRayMode: XRTargetRayMode;
  54. targetRaySpace: XRSpace;
  55. gripSpace: XRSpace | undefined;
  56. gamepad: Gamepad | undefined;
  57. profiles: Array<string>;
  58. }
  59. interface XRSessionInit {
  60. optionalFeatures?: XRReferenceSpaceType[];
  61. requiredFeatures?: XRReferenceSpaceType[];
  62. }
  63. interface XRSession extends XRAnchorCreator {
  64. addEventListener: Function;
  65. removeEventListener: Function;
  66. requestReferenceSpace(type: XRReferenceSpaceType): Promise<XRReferenceSpace>;
  67. updateRenderState(XRRenderStateInit: XRRenderState): Promise<void>;
  68. requestAnimationFrame: Function;
  69. end(): Promise<void>;
  70. renderState: XRRenderState;
  71. inputSources: Array<XRInputSource>;
  72. // hit test
  73. requestHitTestSource(options: XRHitTestOptionsInit): Promise<XRHitTestSource>;
  74. requestHitTestSourceForTransientInput(options: XRTransientInputHitTestOptionsInit): Promise<XRTransientInputHitTestSource>;
  75. // legacy AR hit test
  76. requestHitTest(ray: XRRay, referenceSpace: XRReferenceSpace): Promise<XRHitResult[]>;
  77. // legacy plane detection
  78. updateWorldTrackingState(options: {
  79. planeDetectionState?: { enabled: boolean; }
  80. }): void;
  81. }
  82. interface XRReferenceSpace extends XRSpace {
  83. getOffsetReferenceSpace(originOffset: XRRigidTransform): XRReferenceSpace;
  84. onreset: any;
  85. }
  86. type XRPlaneSet = Set<XRPlane>;
  87. type XRAnchorSet = Set<XRAnchor>;
  88. interface XRFrame {
  89. session: XRSession;
  90. getViewerPose(referenceSpace: XRReferenceSpace): XRViewerPose | undefined;
  91. getPose(space: XRSpace, baseSpace: XRSpace): XRPose | undefined;
  92. // AR
  93. getHitTestResults(hitTestSource: XRHitTestSource): Array<XRHitTestResult> ;
  94. getHitTestResultsForTransientInput(hitTestSource: XRTransientInputHitTestSource): Array<XRTransientInputHitTestResult>;
  95. // Anchors
  96. trackedAnchors?: XRAnchorSet;
  97. // Planes
  98. worldInformation: {
  99. detectedPlanes?: XRPlaneSet;
  100. };
  101. }
  102. interface XRViewerPose extends XRPose {
  103. views: Array<XRView>;
  104. }
  105. interface XRPose {
  106. transform: XRRigidTransform;
  107. emulatedPosition: boolean;
  108. }
  109. interface XRWebGLLayerOptions {
  110. antialias?: boolean;
  111. depth?: boolean;
  112. stencil?: boolean;
  113. alpha?: boolean;
  114. multiview?: boolean;
  115. framebufferScaleFactor?: number;
  116. }
  117. declare var XRWebGLLayer: {
  118. prototype: XRWebGLLayer;
  119. new(session: XRSession, context: WebGLRenderingContext | undefined, options?: XRWebGLLayerOptions): XRWebGLLayer;
  120. };
  121. interface XRWebGLLayer {
  122. framebuffer: WebGLFramebuffer;
  123. framebufferWidth: number;
  124. framebufferHeight: number;
  125. getViewport: Function;
  126. }
  127. declare class XRRigidTransform {
  128. constructor(matrix: Float32Array | DOMPointInit, direction?: DOMPointInit);
  129. position: DOMPointReadOnly;
  130. orientation: DOMPointReadOnly;
  131. matrix: Float32Array;
  132. inverse: XRRigidTransform;
  133. }
  134. interface XRView {
  135. eye: XREye;
  136. projectionMatrix: Float32Array;
  137. transform: XRRigidTransform;
  138. }
  139. interface XRInputSourceChangeEvent {
  140. session: XRSession;
  141. removed: Array<XRInputSource>;
  142. added: Array<XRInputSource>;
  143. }
  144. interface XRInputSourceEvent extends Event {
  145. readonly frame: XRFrame;
  146. readonly inputSource: XRInputSource;
  147. }
  148. // Experimental(er) features
  149. declare class XRRay {
  150. constructor(transformOrOrigin: XRRigidTransform | DOMPointInit, direction?: DOMPointInit);
  151. origin: DOMPointReadOnly;
  152. direction: DOMPointReadOnly;
  153. matrix: Float32Array;
  154. }
  155. declare enum XRHitTestTrackableType {
  156. "point",
  157. "plane"
  158. }
  159. interface XRHitResult {
  160. hitMatrix: Float32Array;
  161. }
  162. interface XRTransientInputHitTestResult {
  163. readonly inputSource: XRInputSource;
  164. readonly results: Array<XRHitTestResult>;
  165. }
  166. interface XRHitTestResult {
  167. getPose(baseSpace: XRSpace): XRPose | undefined;
  168. }
  169. interface XRHitTestSource {
  170. cancel(): void;
  171. }
  172. interface XRTransientInputHitTestSource {
  173. cancel(): void;
  174. }
  175. interface XRHitTestOptionsInit {
  176. space: XRSpace;
  177. entityTypes?: Array<XRHitTestTrackableType>;
  178. offsetRay?: XRRay;
  179. }
  180. interface XRTransientInputHitTestOptionsInit {
  181. profile: string;
  182. entityTypes?: Array<XRHitTestTrackableType>;
  183. offsetRay?: XRRay;
  184. }
  185. interface XRAnchor {
  186. // remove?
  187. id?: string;
  188. anchorSpace: XRSpace;
  189. lastChangedTime: number;
  190. detach(): void;
  191. }
  192. interface XRPlane extends XRAnchorCreator {
  193. orientation: "Horizontal" | "Vertical";
  194. planeSpace: XRSpace;
  195. polygon: Array<DOMPointReadOnly>;
  196. lastChangedTime: number;
  197. }
  198. interface XRAnchorCreator {
  199. // AR Anchors
  200. createAnchor(pose: XRPose | XRRigidTransform, referenceSpace: XRReferenceSpace): Promise<XRAnchor>;
  201. }