-
Notifications
You must be signed in to change notification settings - Fork 22.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add WebXR Hit Test reference docs - pt 1 #8042
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
96 changes: 96 additions & 0 deletions
96
files/en-us/web/api/xrsession/requesthittestsource/index.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
--- | ||
title: XRSession.requestHitTestSource() | ||
slug: Web/API/XRSession/requestHitTestSource | ||
tags: | ||
- API | ||
- AR | ||
- Augmented Reality | ||
- Experimental | ||
- Method | ||
- Reference | ||
- VR | ||
- Virtual Reality | ||
- WebXR | ||
- WebXR Device API | ||
- XR | ||
- XRSession | ||
browser-compat: api.XRSession.requestHitTestSource | ||
--- | ||
{{APIRef("WebXR Device API")}} | ||
|
||
The **`requestHitTestSource()`** method of the | ||
{{domxref("XRSession")}} interface returns a {{jsxref("Promise")}} that resolves with an {{domxref("XRHitTestSource")}} object that can be passed to {{domxref("XRFrame.getHitTestResults()")}}. | ||
|
||
## Syntax | ||
|
||
```js | ||
requestHitTestSource(options); | ||
``` | ||
|
||
### Parameters | ||
|
||
- `options` | ||
- : An object containing configuration options, specifically: | ||
- `space`: The {{domxref("XRSpace")}} that will be tracked by the hit test source. | ||
- `entityTypes`: {{optional_inline}} An {{jsxref("Array")}} specifying the types of entities to be used for hit test source creation. If no no entity type is specified, the array defaults to a single element with the `plane` type. Possible types: | ||
- `point`: Compute hit test results based on characteristic points detected. | ||
- `plane`: Compute hit test results based on real-world planes detected. | ||
- `mesh`: Compute hit test results based on meshes detected. | ||
Elchi3 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
- `offsetRay`: {{optional_inline}} The {{domxref("XRRay")}} object that will be used to perform hit test. If no `XRRay` object has been provided, a new `XRRay` object is constructed without any parameters. | ||
|
||
### Return value | ||
|
||
A {{jsxref("Promise")}} that resolves with an {{domxref("XRHitTestSource")}} object. | ||
|
||
### Exceptions | ||
|
||
Rather than throwing true exceptions, `requestHitTestSource()` rejects the | ||
returned promise with a {{domxref("DOMException")}}, specifically, one of the following: | ||
|
||
- `NotSupportedError` | ||
- : If `hit-test` is not an enabled feature in {{domxref("XRSystem.requestSession()")}}. | ||
Elchi3 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
- `InvalidStateError` | ||
- : If the session has already ended. | ||
- `NotAllowedError` | ||
- : If there is an unreasonable amount of requests. Some user agents might limit usage for privacy reasons. | ||
|
||
## Examples | ||
|
||
### Requesting a hit test source | ||
|
||
To request a hit test source, start an {{domxref("XRSession")}} with the `hit-test` session feature enabled. Next, configure the hit test source and store it for later use in the frame loop and call {{domxref("XRFrame.getHitTestResults()")}} to obtain the result. | ||
|
||
```js | ||
|
||
const xrSession = navigator.xr.requestSession("immersive-ar", { | ||
requiredFeatures: ["local", "hit-test"] | ||
}); | ||
|
||
let hitTestSource = null; | ||
|
||
xrSession.requestHitTestSource({ | ||
space : viewerSpace, // obtained from xrSession.requestReferenceSpace("viewer"); | ||
offsetRay : new XRRay({y: 0.5}) | ||
}).then((viewerHitTestSource) => { | ||
hitTestSource = viewerHitTestSource; | ||
}); | ||
|
||
// frame loop | ||
function onXRFrame(time, xrFrame) { | ||
let hitTestResults = xrFrame.getHitTestResults(hitTestSource); | ||
|
||
// do things with the hit test results | ||
} | ||
``` | ||
|
||
## Specifications | ||
|
||
{{Specifications}} | ||
|
||
## Browser compatibility | ||
|
||
{{Compat}} | ||
|
||
## See also | ||
|
||
- {{domxref("XRSession.requestHitTestSourceForTransientInput()")}} |
96 changes: 96 additions & 0 deletions
96
files/en-us/web/api/xrsession/requesthittestsourcefortransientinput/index.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
--- | ||
title: XRSession.requestHitTestSourceForTransientInput() | ||
slug: Web/API/XRSession/requestHitTestSourceForTransientInput | ||
tags: | ||
- API | ||
- AR | ||
- Augmented Reality | ||
- Experimental | ||
- Method | ||
- Reference | ||
- VR | ||
- Virtual Reality | ||
- WebXR | ||
- WebXR Device API | ||
- XR | ||
- XRSession | ||
browser-compat: api.XRSession.requestHitTestSourceForTransientInput | ||
--- | ||
{{APIRef("WebXR Device API")}} | ||
|
||
The **`requestHitTestSourceForTransientInput()`** method of the | ||
{{domxref("XRSession")}} interface returns a {{jsxref("Promise")}} that resolves with an {{domxref("XRTransientInputHitTestSource")}} object that can be passed to {{domxref("XRFrame.getHitTestResultsForTransientInput()")}}. | ||
|
||
## Syntax | ||
|
||
```js | ||
requestHitTestSourceForTransientInput(options); | ||
``` | ||
|
||
### Parameters | ||
|
||
- `options` | ||
- : An object containing configuration options, specifically: | ||
- `profile`: A string specifying the [input profile name](/en-US/docs/Web/API/XRInputSource) of the transient input source that will be used to compute hit test results. | ||
- `entityTypes`: {{optional_inline}} An {{jsxref("Array")}} specifying the types of entities to be used for hit test source creation. If no no entity type is specified, the array defaults to a single element with the `plane` type. Possible types: | ||
- `point`: Compute hit test results based on characteristic points detected. | ||
- `plane`: Compute hit test results based on real-world planes detected. | ||
- `mesh`: Compute hit test results based on meshes detected. | ||
- `offsetRay`: {{optional_inline}} The {{domxref("XRRay")}} object that will be used to perform hit test. If no `XRRay` object has been provided, a new `XRRay` object is constructed without any parameters. | ||
|
||
### Return value | ||
|
||
A {{jsxref("Promise")}} that resolves with an {{domxref("XRTransientInputHitTestSource")}} object. | ||
|
||
### Exceptions | ||
|
||
Rather than throwing true exceptions, `requestHitTestSourceForTransientInput()` rejects the | ||
returned promise with a {{domxref("DOMException")}}, specifically, one of the following: | ||
|
||
- `NotSupportedError` | ||
- : If `hit-test` is not an enabled feature in {{domxref("XRSystem.requestSession()")}}. | ||
- `InvalidStateError` | ||
- : If the session has already ended. | ||
- `NotAllowedError` | ||
- : If there is an unreasonable amount of requests. Some user agents might limit usage for privacy reasons. | ||
|
||
## Examples | ||
|
||
### Requesting a transient hit test source | ||
|
||
To request a hit test source, start an {{domxref("XRSession")}} with the `hit-test` session feature enabled. Next, configure the hit test source and store it for later use in the frame loop and call {{domxref("XRFrame.getHitTestResultsForTransientInput()")}} to obtain the result. | ||
|
||
```js | ||
|
||
const xrSession = navigator.xr.requestSession("immersive-ar", { | ||
requiredFeatures: ["local", "hit-test"] | ||
}); | ||
|
||
let transientHitTestSource = null; | ||
|
||
xrSession.requestHitTestSourceForTransientInput({ | ||
space : "generic-touchscreen", | ||
offsetRay : new XRRay() | ||
}).then((touchScreenHitTestSource) => { | ||
transientHitTestSource = touchScreenHitTestSource; | ||
}); | ||
|
||
// frame loop | ||
function onXRFrame(time, xrFrame) { | ||
let hitTestResults = xrFrame.getHitTestResultsForTransientInput(transientHitTestSource); | ||
|
||
// do things with the transient hit test results | ||
} | ||
``` | ||
|
||
## Specifications | ||
|
||
{{Specifications}} | ||
|
||
## Browser compatibility | ||
|
||
{{Compat}} | ||
|
||
## See also | ||
|
||
- {{domxref("XRSession.requestHitTestSource()")}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What are characteristic points?
The subtext of this question is, if I were a developer who didin't know what this is, would this provide me with enough information find out.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hm, yeah, I think this is rather vague and "characteristic points" is what the spec says. Not sure what else to say, though. I believe plane detection and detection using meshes are known concepts to XR/3D developers. For points, this issue argues that point detection could be subsumed into mesh detection: immersive-web/hit-test#66
I'm not expert enough to clarify "points" further. Does it refer to some new detection technique? LIDAR points? Something else? I guess this could be very device-specific also, so maybe that's why the spec left it as such?
Also, the whole
entityTypes
thing is rather unstable still. See immersive-web/hit-test#67 where some people also recognized that this API is rather hard to grok.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At least I've removed
entityTypes
from the code example now (it is optional anyway).There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've requested a definition. I'm fine with resolving this for now.