From e1a6f5c3eb33f5dcb3e3c32bf010394ffafd216f Mon Sep 17 00:00:00 2001 From: Mamadou Babaei Date: Fri, 7 Jun 2024 21:18:22 +0200 Subject: [PATCH] temporarility change the way we calculate the wrist offset --- .../Private/SGTracking/SGXRTracker.cpp | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/Source/SenseGloveTracking/Private/SGTracking/SGXRTracker.cpp b/Source/SenseGloveTracking/Private/SGTracking/SGXRTracker.cpp index dee55121..bc7d88d9 100644 --- a/Source/SenseGloveTracking/Private/SGTracking/SGXRTracker.cpp +++ b/Source/SenseGloveTracking/Private/SGTracking/SGXRTracker.cpp @@ -1118,6 +1118,7 @@ bool FSGXRTracker::GetControllerOrientationAndPosition(const int32 ControllerInd } bool bTracked = false; + if (ControllerIndex == Pimpl->DeviceIndex) { FTransform ControllerTransform{FTransform::Identity}; @@ -1660,9 +1661,11 @@ bool FSGXRTracker::FImpl::GetWristTransform( static const FName OpenXRName{TEXT("OpenXR")}; static const FName OpenXRHandTrackingName{TEXT("OpenXRHandTracking")}; - const FName& MotionSource{GetMotionSourceName(DeviceHand)}; static constexpr int32 CurrentPlayerControllerIndex = 0; + const FName& OpenXRMotionSource{GetDefaultMotionSourceName(DeviceHand)}; + const FName& OpenXRHandTrackingMotionSource{GetMotionSourceName(DeviceHand)}; + const bool bFallbackToHandTrackingIfNoGloveDetected = ShouldFallbackToHandTrackingIfNoGloveDetected(); const TArray MotionControllers{IModularFeatures::Get().GetModularFeatureImplementations< @@ -1675,11 +1678,26 @@ bool FSGXRTracker::FImpl::GetWristTransform( continue; } - const ETrackingStatus TrackingStatus = MotionController->GetControllerTrackingStatus( - CurrentPlayerControllerIndex, MotionSource); - if (TrackingStatus == ETrackingStatus::NotTracked) + const ETrackingStatus OpenXRMotionSourceTrackingStatus = + MotionController->GetControllerTrackingStatus(CurrentPlayerControllerIndex, OpenXRMotionSource); + + if (bFallbackToHandTrackingIfNoGloveDetected) { - continue; + const ETrackingStatus OpenXRHandTrackingMotionSourceTrackingStatus = + MotionController->GetControllerTrackingStatus( + CurrentPlayerControllerIndex, OpenXRHandTrackingMotionSource); + if (OpenXRMotionSourceTrackingStatus == ETrackingStatus::NotTracked + && OpenXRHandTrackingMotionSourceTrackingStatus == ETrackingStatus::NotTracked) + { + continue; + } + } + else + { + if (OpenXRMotionSourceTrackingStatus == ETrackingStatus::NotTracked) + { + continue; + } } const FName DeviceTypeName{MotionController->GetMotionControllerDeviceTypeName()}; @@ -1694,15 +1712,18 @@ bool FSGXRTracker::FImpl::GetWristTransform( if (DeviceTypeName == OpenXRHandTrackingName) { bOutMotionSourceHandTracking = true; - const bool bResult = GetOpenXRHandTrackingWristTransform(DeviceHand, OutTransform); + // const bool bResult = GetOpenXRHandTrackingWristTransform(DeviceHand, OutTransform); + const bool bResult = GetOpenXRWristTransform( + DeviceHand, MotionController, OpenXRHandTrackingMotionSource, OutTransform); return bResult; } } if (DeviceTypeName == OpenXRName) { - bOutMotionSourceHandTracking = false; - const bool bResult = GetOpenXRWristTransform(DeviceHand, MotionController, MotionSource, OutTransform); + bOutMotionSourceHandTracking = true; + const bool bResult = GetOpenXRWristTransform( + DeviceHand, MotionController, OpenXRMotionSource, OutTransform); return bResult; } }