[Bf-blender-cvs] [0c92bf5e37a] xr-controller-support: XR: Fix viewer pose and teleport calculation
Peter Kim
noreply at git.blender.org
Sat Jun 12 12:33:34 CEST 2021
Commit: 0c92bf5e37a86a491810a3b364e9e6456ab5985f
Author: Peter Kim
Date: Sat Jun 12 19:28:07 2021 +0900
Branches: xr-controller-support
https://developer.blender.org/rB0c92bf5e37a86a491810a3b364e9e6456ab5985f
XR: Fix viewer pose and teleport calculation
===================================================================
M source/blender/windowmanager/xr/intern/wm_xr_operators.c
M source/blender/windowmanager/xr/intern/wm_xr_session.c
===================================================================
diff --git a/source/blender/windowmanager/xr/intern/wm_xr_operators.c b/source/blender/windowmanager/xr/intern/wm_xr_operators.c
index 26f76765f74..1ef4bdc01c3 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_operators.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr_operators.c
@@ -338,15 +338,15 @@ static void wm_xr_navigation_teleport(bContext *C,
/* Teleport. */
if (ob) {
- float nav_location[3];
+ float nav_location[3], viewer_location[3];
- if (WM_xr_session_state_nav_location_get(xr, nav_location)) {
+ if (WM_xr_session_state_nav_location_get(xr, nav_location) &&
+ WM_xr_session_state_viewer_pose_location_get(xr, viewer_location)) {
for (int a = 0; a < 3; ++a) {
if (teleport_axes[a]) {
- nav_location[a] += teleport_t * (location[a] - nav_location[a]);
+ nav_location[a] += teleport_t * (location[a] - viewer_location[a]);
}
}
- sub_v3_v3(nav_location, xr->runtime->session_state.prev_base_pose.position);
WM_xr_session_state_nav_location_set(xr, nav_location);
}
}
diff --git a/source/blender/windowmanager/xr/intern/wm_xr_session.c b/source/blender/windowmanager/xr/intern/wm_xr_session.c
index 16f4f446f41..f0dcb33f76f 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_session.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr_session.c
@@ -391,11 +391,11 @@ void wm_xr_session_state_update(const XrSessionSettings *settings,
const bool use_position_tracking = settings->flag & XR_SESSION_USE_POSITION_TRACKING;
const bool use_absolute_tracking = settings->flag & XR_SESSION_USE_ABSOLUTE_TRACKING;
wmXrEyeData *eye = &state->eyes[draw_view->view];
+ float q[4];
- mul_qt_qtqt(viewer_pose.orientation_quat,
- draw_data->base_pose.orientation_quat,
- draw_view->local_pose.orientation_quat);
- copy_v3_v3(viewer_pose.position, draw_data->base_pose.position);
+ mul_qt_qtqt(q, draw_data->base_pose.orientation_quat, draw_view->local_pose.orientation_quat);
+ mul_qt_qtqt(viewer_pose.orientation_quat, q, state->nav_pose.orientation_quat);
+ add_v3_v3v3(viewer_pose.position, draw_data->base_pose.position, state->nav_pose.position);
/* The local pose and the eye pose (which is copied from an earlier local pose) both are view
* space, so Y-up. In this case we need them in regular Z-up. */
if (!use_absolute_tracking) {
@@ -411,7 +411,7 @@ void wm_xr_session_state_update(const XrSessionSettings *settings,
copy_v3_v3(state->viewer_pose.position, viewer_pose.position);
copy_qt_qt(state->viewer_pose.orientation_quat, viewer_pose.orientation_quat);
- wm_xr_pose_to_viewmat(&viewer_pose, state->viewer_viewmat);
+ wm_xr_pose_scale_to_viewmat(&viewer_pose, state->nav_scale, state->viewer_viewmat);
/* No idea why, but multiplying by two seems to make it match the VR view more. */
eye->focal_len = 2.0f *
More information about the Bf-blender-cvs
mailing list