From 382df469c130ed1496d78fe2a82e86bac24698a8 Mon Sep 17 00:00:00 2001 From: Lubos Date: Mon, 15 Aug 2022 19:55:09 +0200 Subject: [PATCH] OpenXR - Recenter changes pitch of the 2D screens --- Common/VR/VRRenderer.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Common/VR/VRRenderer.cpp b/Common/VR/VRRenderer.cpp index d77f8797fd..41ceeedf26 100644 --- a/Common/VR/VRRenderer.cpp +++ b/Common/VR/VRRenderer.cpp @@ -16,6 +16,7 @@ GLboolean initialized = GL_FALSE; GLboolean stageSupported = GL_FALSE; int vrConfig[VR_CONFIG_MAX] = {}; +float menuPitch = 0; float menuYaw = 0; float recenterYaw = 0; XrVector3f hmdorientation; @@ -171,6 +172,7 @@ void VR_Recenter(engine_t* engine) { } // Update menu orientation + menuPitch = hmdorientation.x; menuYaw = 0; } @@ -384,13 +386,14 @@ void VR_EndFrame( engine_t* engine ) { cylinder_layer.subImage.imageRect.extent.height = height; cylinder_layer.subImage.imageArrayIndex = 0; float distance = vrConfig[VR_CONFIG_CANVAS_DISTANCE]; - const XrVector3f axis = {0.0f, 1.0f, 0.0f}; XrVector3f pos = { invViewTransform[0].position.x - sin(ToRadians(menuYaw)) * distance, invViewTransform[0].position.y, invViewTransform[0].position.z - cos(ToRadians(menuYaw)) * distance }; - cylinder_layer.pose.orientation = XrQuaternionf_CreateFromVectorAngle(axis, ToRadians(menuYaw)); + XrQuaternionf pitch = XrQuaternionf_CreateFromVectorAngle({1, 0, 0}, -ToRadians(menuPitch)); + XrQuaternionf yaw = XrQuaternionf_CreateFromVectorAngle({0, 1, 0}, ToRadians(menuYaw)); + cylinder_layer.pose.orientation = XrQuaternionf_Multiply(pitch, yaw); cylinder_layer.pose.position = pos; cylinder_layer.radius = 12.0f; cylinder_layer.centralAngle = M_PI * 0.5f;