From afaf887a475ee13f52179e712acb5f791868a491 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 31 Jul 2023 22:57:24 +0100 Subject: [PATCH] Fix adjustment to weapon scopes for asymmetric fov HMDs --- Projects/Android/jni/OpenJK/JKXR/VrClientInfo.h | 3 ++- Projects/Android/jni/OpenJK/JKXR/android/TBXR_Common.cpp | 4 ++-- Projects/Android/jni/OpenJK/JKXR/windows/TBXR_Common.cpp | 3 ++- Projects/Android/jni/OpenJK/code/cgame/cg_drawtools.cpp | 5 +++-- Projects/Android/jni/OpenJK/codeJK2/cgame/cg_drawtools.cpp | 5 +++-- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Projects/Android/jni/OpenJK/JKXR/VrClientInfo.h b/Projects/Android/jni/OpenJK/JKXR/VrClientInfo.h index 42be67e..fe355e3 100644 --- a/Projects/Android/jni/OpenJK/JKXR/VrClientInfo.h +++ b/Projects/Android/jni/OpenJK/JKXR/VrClientInfo.h @@ -38,7 +38,8 @@ typedef struct { bool third_person; float fov_x; float fov_y; - float off_center_fov; + float off_center_fov_x; + float off_center_fov_y; float tempWeaponVelocity; diff --git a/Projects/Android/jni/OpenJK/JKXR/android/TBXR_Common.cpp b/Projects/Android/jni/OpenJK/JKXR/android/TBXR_Common.cpp index 83f2bdf..c4f638c 100644 --- a/Projects/Android/jni/OpenJK/JKXR/android/TBXR_Common.cpp +++ b/Projects/Android/jni/OpenJK/JKXR/android/TBXR_Common.cpp @@ -1875,8 +1875,8 @@ void TBXR_prepareEyeBuffer(int eye ) //Seems odd, but used to move the HUD elements to be central on the player's view //HMDs with a symmetric fov (like the PICO) will have 0 in this value, but the Meta Quest //will have an asymmetric fov and the HUD would be very misaligned as a result - vr.off_center_fov = -(gAppState.Views[eye].fov.angleLeft + gAppState.Views[eye].fov.angleRight) / 2.0f; -} + vr.off_center_fov_x = -(gAppState.Views[eye].fov.angleLeft + gAppState.Views[eye].fov.angleRight) / 2.0f; + vr.off_center_fov_y = -(gAppState.Views[eye].fov.angleUp + gAppState.Views[eye].fov.angleDown) / 2.0f;} void TBXR_finishEyeBuffer(int eye ) { diff --git a/Projects/Android/jni/OpenJK/JKXR/windows/TBXR_Common.cpp b/Projects/Android/jni/OpenJK/JKXR/windows/TBXR_Common.cpp index bcdd5a7..6e0836d 100644 --- a/Projects/Android/jni/OpenJK/JKXR/windows/TBXR_Common.cpp +++ b/Projects/Android/jni/OpenJK/JKXR/windows/TBXR_Common.cpp @@ -1099,7 +1099,8 @@ void TBXR_prepareEyeBuffer(int eye ) //Seems odd, but used to move the HUD elements to be central on the player's view //HMDs with a symmetric fov (like the PICO) will have 0 in this value, but the Meta Quest //will have an asymmetric fov and the HUD would be very misaligned as a result - vr.off_center_fov = -(gAppState.Views[eye].fov.angleLeft + gAppState.Views[eye].fov.angleRight) / 2.0f; + vr.off_center_fov_x = -(gAppState.Views[eye].fov.angleLeft + gAppState.Views[eye].fov.angleRight) / 2.0f; + vr.off_center_fov_y = -(gAppState.Views[eye].fov.angleUp + gAppState.Views[eye].fov.angleDown) / 2.0f; } void WIN_SwapWindow(); diff --git a/Projects/Android/jni/OpenJK/code/cgame/cg_drawtools.cpp b/Projects/Android/jni/OpenJK/code/cgame/cg_drawtools.cpp index 86de304..8e61daf 100644 --- a/Projects/Android/jni/OpenJK/code/cgame/cg_drawtools.cpp +++ b/Projects/Android/jni/OpenJK/code/cgame/cg_drawtools.cpp @@ -39,7 +39,8 @@ void CG_AdjustFrom640(float* x, float* y, float* w, float* h) { } //We need to add an offset due to the effect of the compositor projection for asymmetric FOVs - xoffset += vr->off_center_fov * 640; + xoffset += vr->off_center_fov_x * 640; + float yoffset = vr->off_center_fov_y * 480; *x *= screenXScale; *y *= screenYScale; @@ -51,7 +52,7 @@ void CG_AdjustFrom640(float* x, float* y, float* w, float* h) { } *x += (640 - (640 * screenXScale)) / 2.0f + xoffset; - *y += (480 - (480 * screenYScale)) / 2.0f - ((cg.drawingHUD != CG_HUD_ZOOM) ? cg_hudYOffset.value : 0); + *y += (480 - (480 * screenYScale)) / 2.0f - ((cg.drawingHUD != CG_HUD_ZOOM) ? cg_hudYOffset.value : 0) - yoffset; } } diff --git a/Projects/Android/jni/OpenJK/codeJK2/cgame/cg_drawtools.cpp b/Projects/Android/jni/OpenJK/codeJK2/cgame/cg_drawtools.cpp index dbc8157..959ced9 100644 --- a/Projects/Android/jni/OpenJK/codeJK2/cgame/cg_drawtools.cpp +++ b/Projects/Android/jni/OpenJK/codeJK2/cgame/cg_drawtools.cpp @@ -38,7 +38,8 @@ void CG_AdjustFrom640( float *x, float *y, float *w, float *h ) { } //We need to add an offset due to the effect of the compositor projection for asymmetric FOVs - xoffset += vr->off_center_fov * 640; + xoffset += vr->off_center_fov_x * 640; + float yoffset = vr->off_center_fov_y * 480; *x *= screenXScale; *y *= screenYScale; @@ -50,7 +51,7 @@ void CG_AdjustFrom640( float *x, float *y, float *w, float *h ) { } *x += (640 - (640 * screenXScale)) / 2.0f + xoffset; - *y += (480 - (480 * screenYScale)) / 2.0f - ((cg.drawingHUD != CG_HUD_ZOOM) ? cg_hudYOffset.value : 0); + *y += (480 - (480 * screenYScale)) / 2.0f - ((cg.drawingHUD != CG_HUD_ZOOM) ? cg_hudYOffset.value : 0) - yoffset; } }