add the final draft for docs section: SGHandTrackerComponent
This commit is contained in:
@@ -15,12 +15,14 @@ Since the SenseGlove Unreal Engine Plugin registers itself as an `OpenXRHandTrac
|
||||
> `IXTrackingSystem::GetHandTrackingState()`, which guarantees the OpenXR
|
||||
> hand-tracking data is coming from a SenseGlove device and also takes into
|
||||
> account the SenseGlove's wrist-tracker offsets automatically.
|
||||
>
|
||||
> This is the recommended approach over Unreal Engine's own
|
||||
> `IXTrackingSystem::GetHandTrackingState()` or you have to ensure the data
|
||||
> received is coming from a SenseGlove device yourself, and also take into
|
||||
> account the SenseGlove's wrist-tracker settings and calculate the wrist
|
||||
> offsets either using one of the `SGHapticGlove::GetWristLocation()` variants,
|
||||
> or manually.
|
||||
>
|
||||
> In short `IXTrackingSystem::GetHandTrackingState()` does not respect the
|
||||
> offsets from
|
||||
> `Project Settings > SenseGlove > Tracking > Wrist-Tracking Settings`
|
||||
@@ -31,6 +33,7 @@ Since the SenseGlove Unreal Engine Plugin registers itself as an `OpenXRHandTrac
|
||||
> `IXTrackingSystem::GetHandTrackingState()`, which guarantees the OpenXR
|
||||
> hand-tracking data is coming from a SenseGlove device and also takes into
|
||||
> account the SenseGlove's wrist-tracker offsets automatically.
|
||||
>
|
||||
> This is the recommended approach over Unreal Engine's own
|
||||
> `IXTrackingSystem::GetHandTrackingState()` or you have to ensure the data
|
||||
> received is coming from a SenseGlove device yourself, and also take into
|
||||
@@ -38,10 +41,31 @@ Since the SenseGlove Unreal Engine Plugin registers itself as an `OpenXRHandTrac
|
||||
> offsets either using one of the `GetWristLocation()` variants, e.g.,
|
||||
> `SGHandLayer::GetWristLocation()`, `SGHapticGlove::GetWristLocation()`, etc,
|
||||
> or manually.
|
||||
>
|
||||
> In short `IXTrackingSystem::GetHandTrackingState()` does not respect the
|
||||
> offsets from
|
||||
> `Project Settings > SenseGlove > Tracking Settings > Wrist Tracking Settings`.
|
||||
|
||||
> [!TIP]
|
||||
> Starting with version `v2.8.0`, the SenseGlove Unreal Engine Plugin provides
|
||||
> a highly convenient, high-level abstraction that eliminates all of the manual
|
||||
> steps described above. By using
|
||||
> [`SGHandTrackerComponent`](../roll-your-own-hand-manipulation-system/sghandtrackercomponent/)
|
||||
> you can simply add the component to your Pawn class (or any actor that
|
||||
> requires hand-tracking data), configure its properties, and retrieve the
|
||||
> tracking data with a single function call when needed.
|
||||
>
|
||||
> The SenseGlove UE Plugin automatically handles all required settings and
|
||||
> offset calculations for your positional tracking hardware, whether you are
|
||||
> using pure hand tracking or a SenseGlove device. It also provides an optional
|
||||
> debug hand out of the box, allowing you to instantly visualize hand-tracking
|
||||
> data without writing a single line of code.
|
||||
>
|
||||
> Furthermore, version `v2.8.0` ships with a companion component,
|
||||
> [`SGHapticsComponent`](../roll-your-own-hand-manipulation-system/sghapticscomponent/),
|
||||
> which makes it easy to add haptic feedback to your own custom or third-party
|
||||
> hand manipulation systems.
|
||||
|
||||
> [!TIP]
|
||||
> Sometimes, using `IXTrackingSystem::GetHandTrackingState()` is unavoidable,
|
||||
> e.g., when using a third-party hand manipulation system such as
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# Consuming FXRHandTrackingState
|
||||
|
||||
> [!TIP]
|
||||
> Starting with version `v2.8.0`, a highly convenient high-level approach for
|
||||
> retrieving `FXRHandTrackingState` has been introduced. It allows you to obtain
|
||||
> OpenXR hand-tracking data without worrying about the caveats mentioned in the
|
||||
> [`main OpenXR section`](../).
|
||||
>
|
||||
> [`SGHandTrackerComponent`](../../roll-your-own-hand-manipulation-system/sghandtrackercomponent/)
|
||||
> abstracts these complexities away and provides correctly adjusted
|
||||
> hand-tracking data with a single function call.
|
||||
>
|
||||
> This version also introduces a companion
|
||||
> [`SGHapticsComponent`](../../roll-your-own-hand-manipulation-system/sghapticscomponent/)
|
||||
> is also available for easily integrating haptic feedback.
|
||||
|
||||
Taking a closer look at the `FXRHandTrackingState` declaration inside the Unreal Engine's `HeadMountedDisplay` module at [`Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h`](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h), figuring out the data structure might not seem very straightforward:
|
||||
|
||||
```cpp
|
||||
|
||||
@@ -2,6 +2,20 @@
|
||||
|
||||
Before continuing this section, please ensure you've studied the [Consuming FXRHandTrackingState](./) section, first.
|
||||
|
||||
> [!TIP]
|
||||
> Starting with version `v2.8.0`, a highly convenient high-level approach for
|
||||
> retrieving `FXRHandTrackingState` has been introduced. It allows you to obtain
|
||||
> OpenXR hand-tracking data without worrying about the caveats mentioned in the
|
||||
> [`main OpenXR section`](../).
|
||||
>
|
||||
> [`SGHandTrackerComponent`](../../roll-your-own-hand-manipulation-system/sghandtrackercomponent/)
|
||||
> abstracts these complexities away and provides correctly adjusted
|
||||
> hand-tracking data with a single function call.
|
||||
>
|
||||
> This version also introduces a companion
|
||||
> [`SGHapticsComponent`](../../roll-your-own-hand-manipulation-system/sghapticscomponent/)
|
||||
> is also available for easily integrating haptic feedback.
|
||||
|
||||
## Drawing and Animating Virtual Hands
|
||||
|
||||
1. Create a new Virtual Reality project based [the Unreal VR Template](https://dev.epicgames.com/documentation/en-us/unreal-engine/vr-template-in-unreal-engine).
|
||||
|
||||
@@ -2,6 +2,20 @@
|
||||
|
||||
Before continuing this section, please ensure you've first studied the [Consuming FXRHandTrackingState](./) section.
|
||||
|
||||
> [!TIP]
|
||||
> Starting with version `v2.8.0`, a highly convenient high-level approach for
|
||||
> retrieving `FXRHandTrackingState` has been introduced. It allows you to obtain
|
||||
> OpenXR hand-tracking data without worrying about the caveats mentioned in the
|
||||
> [`main OpenXR section`](../).
|
||||
>
|
||||
> [`SGHandTrackerComponent`](../../roll-your-own-hand-manipulation-system/sghandtrackercomponent/)
|
||||
> abstracts these complexities away and provides correctly adjusted
|
||||
> hand-tracking data with a single function call.
|
||||
>
|
||||
> This version also introduces a companion
|
||||
> [`SGHapticsComponent`](../../roll-your-own-hand-manipulation-system/sghapticscomponent/)
|
||||
> is also available for easily integrating haptic feedback.
|
||||
|
||||
## Drawing and Animating Virtual Hands
|
||||
|
||||
1. Create a new Virtual Reality project based [the Unreal VR Template](https://dev.epicgames.com/documentation/en-us/unreal-engine/vr-template-in-unreal-engine).
|
||||
|
||||
+67
@@ -1,9 +1,76 @@
|
||||
# SGHandTrackerComponent
|
||||
|
||||
Since [`v2.1.0`](../../../appendix/changelog.html#210---2024-08-16), the first version to introduce OpenXR support, the **SenseGlove Unreal Engine Plugin** has provided a convenient way to retrieve `FXRHandTrackingState` for SenseGlove devices. This eliminated the need to manually calculate and apply [SenseGlove wrist-tracker settings and offsets](../../../plugin-configuration/plugin-settings/tracking/wrist-tracking/), or to fetch the `Project Settings > SenseGlove > Tracking Settings > Wrist Tracking Settings` and pass them to `GetWristLocation()` in an additional step, [as described in the relevant documentation](../openxr).
|
||||
|
||||
`SGHandTrackerComponent` simplifies this process even further by abstracting all of that away entirely in a high-level manner:
|
||||
|
||||
1. Simply add this component to your Pawn class (or any actor that requires hand-tracking data).
|
||||
2. Configure and adjust its properties.
|
||||
3. Retrieve the tracking data with a single function call when needed.
|
||||
|
||||
The SenseGlove UE Plugin automatically handles all required settings and offset calculations for your positional tracking hardware, regardless of whether you are using pure hand tracking or a SenseGlove device. It also provides an optional debug hand for free, allowing you to visualize the hand-tracking data instantly, without writing a single line of code.
|
||||
|
||||
## Adding the Component to Your Actors
|
||||
|
||||
Adding `SGHandTrackerComponent` is straightforward. In the `Components` panel, click the `Add` button and locate it under the `SenseGlove` section:
|
||||
|
||||

|
||||
|
||||
## Blueprint Properties
|
||||
|
||||
`SGHandTrackerComponent` exposes the following properties through the `Details` panel in Unreal’s Blueprint Editor:
|
||||
|
||||

|
||||
|
||||
- `Right`: If enabled, the component tracks and provides hand-tracking data for the **right** hand. If disabled, it tracks the **left** hand instead.
|
||||
- `Visualize`: If enabled, the component visualizes the hand-tracking data by rendering a debug hand. The appearance of this debug hand can be further customized, as shown below.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## C++ and Blueprint Functions
|
||||
|
||||
`SGHandTrackerComponent` provdies the following C++ methods:
|
||||
|
||||
```cpp
|
||||
public:
|
||||
FORCEINLINE bool IsLeft() const
|
||||
{
|
||||
return !IsRight();
|
||||
}
|
||||
|
||||
FORCEINLINE bool IsRight() const
|
||||
{
|
||||
return bRight;
|
||||
}
|
||||
|
||||
void SetRight(const bool bInRight);
|
||||
|
||||
FORCEINLINE bool IsVisualized() const
|
||||
{
|
||||
return bVisualize;
|
||||
}
|
||||
|
||||
FORCEINLINE void SetVisualize(const bool bInVisualize)
|
||||
{
|
||||
bVisualize = bInVisualize;
|
||||
}
|
||||
|
||||
public:
|
||||
const FXRHandTrackingState& GetHandTrackingState() const;
|
||||
```
|
||||
|
||||
The same functions are also exposed to Blueprint:
|
||||
|
||||

|
||||
|
||||
## GetHandTrackingState
|
||||
|
||||
The most important function accessible via `SGHandTrackerComponent` is `GetHandTrackingState()`:
|
||||
|
||||

|
||||
|
||||
This function returns a snapshot of the OpenXR hand-tracking data as an `FXRHandTrackingState` struct.
|
||||
|
||||
For more details on [what this data contains and how to use it, please refer to the Consuming FXRHandTrackingState section](../../../advanced-topics/openxr/consuming-fxrhandtrackingstate/).
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -45,6 +45,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Updated [Setup the Virtual Hand Meshes](../getting-started/setup-virtual-hand-meshes/) documentation, replacing `FXRMotionControllerData` usage with `FXRHandTrackingState`.
|
||||
- Updated [Plugin Configuration > Plugin Settings > Virtual Hand > Mesh](../plugin-configuration/plugin-settings/virtual-hand/mesh.md) documentation, replacing `FXRMotionControllerData` usage with `FXRHandTrackingState`.
|
||||
- Updated [Advanced Topics > OpenXR](../advanced-topics/openxr/) documentation section with more relevant and plenty of useful information reflecting the recent changes.
|
||||
- Updated [Advanced Topics > OpenXR > Consuming FXRHandTrackingState](../advanced-topics/openxr/consuming-fxrhandtrackingstate/) documentation section with information reflecting the recent changes.
|
||||
- Updated [Advanced Topics > OpenXR > Consuming FXRHandTrackingState > Blueprint](../advanced-topics/openxr/consuming-fxrhandtrackingstate/blueprint.html) documentation section with information reflecting the recent changes.
|
||||
- Updated [Advanced Topics > OpenXR > Consuming FXRHandTrackingState > C++](../advanced-topics/openxr/consuming-fxrhandtrackingstate/cpp.html) documentation section with information reflecting the recent changes.
|
||||
- Removed the **Consuming FXRMotionControllerData** documentation section as it's no longer relevant.
|
||||
- Removed the **Consuming FXRMotionControllerData > Blueprint** documentation section as it's no longer relevant.
|
||||
- Removed the **Consuming FXRMotionControllerData > C++** documentation section as it's no longer relevant.
|
||||
|
||||
Reference in New Issue
Block a user