mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
OpenXR: Add support for hand tracking source extension
This commit is contained in:
parent
9b522ac1a8
commit
4c806c03df
5 changed files with 118 additions and 11 deletions
|
@ -77,6 +77,8 @@ void OpenXRInterface::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_motion_range", "hand", "motion_range"), &OpenXRInterface::set_motion_range);
|
||||
ClassDB::bind_method(D_METHOD("get_motion_range", "hand"), &OpenXRInterface::get_motion_range);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_hand_tracking_source", "hand"), &OpenXRInterface::get_hand_tracking_source);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_hand_joint_flags", "hand", "joint"), &OpenXRInterface::get_hand_joint_flags);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_hand_joint_rotation", "hand", "joint"), &OpenXRInterface::get_hand_joint_rotation);
|
||||
|
@ -97,6 +99,11 @@ void OpenXRInterface::_bind_methods() {
|
|||
BIND_ENUM_CONSTANT(HAND_MOTION_RANGE_CONFORM_TO_CONTROLLER);
|
||||
BIND_ENUM_CONSTANT(HAND_MOTION_RANGE_MAX);
|
||||
|
||||
BIND_ENUM_CONSTANT(HAND_TRACKED_SOURCE_UNKNOWN);
|
||||
BIND_ENUM_CONSTANT(HAND_TRACKED_SOURCE_UNOBSTRUCTED);
|
||||
BIND_ENUM_CONSTANT(HAND_TRACKED_SOURCE_CONTROLLER);
|
||||
BIND_ENUM_CONSTANT(HAND_TRACKED_SOURCE_MAX);
|
||||
|
||||
BIND_ENUM_CONSTANT(HAND_JOINT_PALM);
|
||||
BIND_ENUM_CONSTANT(HAND_JOINT_WRIST);
|
||||
BIND_ENUM_CONSTANT(HAND_JOINT_THUMB_METACARPAL);
|
||||
|
@ -1269,6 +1276,27 @@ OpenXRInterface::HandMotionRange OpenXRInterface::get_motion_range(const Hand p_
|
|||
return HAND_MOTION_RANGE_MAX;
|
||||
}
|
||||
|
||||
OpenXRInterface::HandTrackedSource OpenXRInterface::get_hand_tracking_source(const Hand p_hand) const {
|
||||
ERR_FAIL_INDEX_V(p_hand, HAND_MAX, HAND_TRACKED_SOURCE_UNKNOWN);
|
||||
|
||||
OpenXRHandTrackingExtension *hand_tracking_ext = OpenXRHandTrackingExtension::get_singleton();
|
||||
if (hand_tracking_ext && hand_tracking_ext->get_active()) {
|
||||
OpenXRHandTrackingExtension::HandTrackedSource source = hand_tracking_ext->get_hand_tracking_source(OpenXRHandTrackingExtension::HandTrackedHands(p_hand));
|
||||
switch (source) {
|
||||
case OpenXRHandTrackingExtension::OPENXR_SOURCE_UNOBSTRUCTED:
|
||||
return HAND_TRACKED_SOURCE_UNOBSTRUCTED;
|
||||
case OpenXRHandTrackingExtension::OPENXR_SOURCE_CONTROLLER:
|
||||
return HAND_TRACKED_SOURCE_CONTROLLER;
|
||||
case OpenXRHandTrackingExtension::OPENXR_SOURCE_UNKNOWN:
|
||||
return HAND_TRACKED_SOURCE_UNKNOWN;
|
||||
default:
|
||||
ERR_FAIL_V_MSG(HAND_TRACKED_SOURCE_UNKNOWN, "Unknown hand tracking source returned by OpenXR");
|
||||
}
|
||||
}
|
||||
|
||||
return HAND_TRACKED_SOURCE_UNKNOWN;
|
||||
}
|
||||
|
||||
BitField<OpenXRInterface::HandJointFlags> OpenXRInterface::get_hand_joint_flags(Hand p_hand, HandJoints p_joint) const {
|
||||
BitField<OpenXRInterface::HandJointFlags> bits;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue