From 89cdacaf880b8b90061c197ae3bcbf30a4866de5 Mon Sep 17 00:00:00 2001 From: Sebastian Pape <pape@vr.rwth-aachen.de> Date: Thu, 26 Aug 2021 15:43:35 +0200 Subject: [PATCH] Implementing interpupillary distance in VirtualRealityUtilities for HMDs --- .../Private/Utility/VirtualRealityUtilities.cpp | 17 ++++++++++++++--- .../Public/Utility/VirtualRealityUtilities.h | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Source/RWTHVRToolkit/Private/Utility/VirtualRealityUtilities.cpp b/Source/RWTHVRToolkit/Private/Utility/VirtualRealityUtilities.cpp index 83caec4b..799dcfa2 100644 --- a/Source/RWTHVRToolkit/Private/Utility/VirtualRealityUtilities.cpp +++ b/Source/RWTHVRToolkit/Private/Utility/VirtualRealityUtilities.cpp @@ -12,11 +12,13 @@ #include "Engine/Engine.h" #include "IXRTrackingSystem.h" +#include "IHeadMountedDisplay.h" bool UVirtualRealityUtilities::IsDesktopMode() { return !IsRoomMountedMode() && !IsHeadMountedMode(); } + bool UVirtualRealityUtilities::IsRoomMountedMode() { #if PLATFORM_SUPPORTS_NDISPLAY @@ -25,6 +27,7 @@ bool UVirtualRealityUtilities::IsRoomMountedMode() return false; #endif } + bool UVirtualRealityUtilities::IsHeadMountedMode() { return GEngine->XRSystem.IsValid() && GEngine->XRSystem->IsHeadTrackingAllowed(); @@ -101,14 +104,22 @@ FString UVirtualRealityUtilities::GetNodeName() return FString(TEXT("Localhost")); #endif } + float UVirtualRealityUtilities::GetEyeDistance() { + if(IsHeadMountedMode()) + { + return GEngine->XRSystem->GetHMDDevice()->GetInterpupillaryDistance(); + } + else + { #if PLATFORM_SUPPORTS_NDISPLAY - ADisplayClusterRootActor* RootActor = IDisplayCluster::Get().GetGameMgr()->GetRootActor(); - return (RootActor) ? RootActor->GetDefaultCamera()->GetInterpupillaryDistance() : 0; + ADisplayClusterRootActor* RootActor = IDisplayCluster::Get().GetGameMgr()->GetRootActor(); + return (RootActor) ? RootActor->GetDefaultCamera()->GetInterpupillaryDistance() : 0.0f; #else - return 0; + return 0.0f; #endif + } } EEyeStereoOffset UVirtualRealityUtilities::GetNodeEyeType() diff --git a/Source/RWTHVRToolkit/Public/Utility/VirtualRealityUtilities.h b/Source/RWTHVRToolkit/Public/Utility/VirtualRealityUtilities.h index ac1d1872..23689665 100644 --- a/Source/RWTHVRToolkit/Public/Utility/VirtualRealityUtilities.h +++ b/Source/RWTHVRToolkit/Public/Utility/VirtualRealityUtilities.h @@ -52,6 +52,7 @@ public: UFUNCTION(BlueprintPure, Category = "DisplayCluster") static bool IsSlave(); UFUNCTION(BlueprintPure, Category = "DisplayCluster") static FString GetNodeName(); + /* Distance in meters */ UFUNCTION(BlueprintPure, Category = "DisplayCluster") static float GetEyeDistance(); UFUNCTION(BlueprintPure, Category = "DisplayCluster") static EEyeStereoOffset GetNodeEyeType(); -- GitLab