[Bf-blender-cvs] [6ee46d5e83f] xr-controller-support: XR: Fix mirror view not matching navigation
Peter Kim
noreply at git.blender.org
Sun Jul 4 08:50:15 CEST 2021
Commit: 6ee46d5e83f33206c4b0978914412bfe50779273
Author: Peter Kim
Date: Sun Jul 4 15:40:38 2021 +0900
Branches: xr-controller-support
https://developer.blender.org/rB6ee46d5e83f33206c4b0978914412bfe50779273
XR: Fix mirror view not matching navigation
Forgot to update eye poses with viewer pose.
===================================================================
M source/blender/makesrna/intern/rna_wm.c
M source/blender/makesrna/intern/rna_xr.c
M source/blender/windowmanager/WM_api.h
M source/blender/windowmanager/WM_types.h
M source/blender/windowmanager/intern/wm_event_query.c
M source/blender/windowmanager/xr/intern/wm_xr_action.c
M source/blender/windowmanager/xr/intern/wm_xr_draw.c
M source/blender/windowmanager/xr/intern/wm_xr_intern.h
M source/blender/windowmanager/xr/intern/wm_xr_session.c
===================================================================
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index c4507619b8b..ba2b398a5a2 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -882,6 +882,20 @@ static void rna_Event_xr_controller_rotation_other_get(PointerRNA *ptr, float *v
}
}
+static float rna_Event_xr_focal_length_get(PointerRNA *ptr)
+{
+ const wmEvent *event = ptr->data;
+ if (WM_event_is_xr(event)) {
+ float focal_len;
+ WM_event_xr_data(
+ event, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &focal_len, NULL, NULL);
+ return focal_len;
+ }
+ else {
+ return 0.0f;
+ }
+}
+
static void rna_Event_xr_view_matrix_get(PointerRNA *ptr, float values[16])
{
const wmEvent *event = ptr->data;
@@ -897,8 +911,8 @@ static void rna_Event_xr_view_matrix_get(PointerRNA *ptr, float values[16])
NULL,
NULL,
NULL,
- (float(*)[4])values,
NULL,
+ (float(*)[4])values,
NULL);
}
else {
@@ -906,20 +920,6 @@ static void rna_Event_xr_view_matrix_get(PointerRNA *ptr, float values[16])
}
}
-static float rna_Event_xr_focal_length_get(PointerRNA *ptr)
-{
- const wmEvent *event = ptr->data;
- if (WM_event_is_xr(event)) {
- float focal_len;
- WM_event_xr_data(
- event, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &focal_len, NULL);
- return focal_len;
- }
- else {
- return 0.0f;
- }
-}
-
static bool rna_Event_xr_bimanual_get(PointerRNA *ptr)
{
const wmEvent *event = ptr->data;
@@ -2570,17 +2570,17 @@ static void rna_def_event(BlenderRNA *brna)
"XR Controller Rotation Other",
"Controller rotation of the other user path for bimanual actions");
+ prop = RNA_def_property(srna, "xr_focal_length", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_float_funcs(prop, "rna_Event_xr_focal_length_get", NULL, NULL);
+ RNA_def_property_ui_text(prop, "XR Focal Length", "Focal length of the XR selection eye");
+
prop = RNA_def_property(srna, "xr_view_matrix", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_array(prop, 16);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_float_funcs(prop, "rna_Event_xr_view_matrix_get", NULL, NULL);
RNA_def_property_ui_text(prop, "XR View Matrix", "View matrix of the XR selection eye");
- prop = RNA_def_property(srna, "xr_focal_length", PROP_FLOAT, PROP_NONE);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_float_funcs(prop, "rna_Event_xr_focal_length_get", NULL, NULL);
- RNA_def_property_ui_text(prop, "XR Focal Length", "Focal length of the XR selection eye");
-
prop = RNA_def_property(srna, "xr_bimanual", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Event_xr_bimanual_get", NULL);
diff --git a/source/blender/makesrna/intern/rna_xr.c b/source/blender/makesrna/intern/rna_xr.c
index e3a0da7ffca..a1b2a28e2bd 100644
--- a/source/blender/makesrna/intern/rna_xr.c
+++ b/source/blender/makesrna/intern/rna_xr.c
@@ -1856,7 +1856,7 @@ static void rna_def_xr_session_settings(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_enum_items(prop, selection_eyes);
RNA_def_property_ui_text(
- prop, "Selection Eye", "Which eye's perspective to use when selecting in VR");
+ prop, "Selection Eye", "Which eye's perspective to use when selecting in VR (GPU select)");
RNA_def_property_update(prop, NC_WM | ND_XR_DATA_CHANGED, NULL);
prop = RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_DISTANCE);
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 64f588e6609..22d2860ee82 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -917,8 +917,8 @@ void WM_event_xr_data(const struct wmEvent *event,
float controller_rot[4],
float controller_loc_other[3],
float controller_rot_other[4],
- float eye_viewmat[4][4],
float *eye_lens,
+ float eye_viewmat[4][4],
bool *bimanual);
bool WM_event_is_xr(const struct wmEvent *event);
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index b5b9a36ea18..241fb09651b 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -729,10 +729,10 @@ typedef struct wmXrActionData {
float controller_loc_other[3];
float controller_rot_other[4];
- /** Viewmat of the selection eye. */
- float eye_viewmat[4][4];
/** Lens (focal length) of the selection eye. */
float eye_lens;
+ /** Viewmat of the selection eye. */
+ float eye_viewmat[4][4];
/** Operator. */
struct wmOperatorType *ot;
diff --git a/source/blender/windowmanager/intern/wm_event_query.c b/source/blender/windowmanager/intern/wm_event_query.c
index cb5f39684b4..f3f59c0f126 100644
--- a/source/blender/windowmanager/intern/wm_event_query.c
+++ b/source/blender/windowmanager/intern/wm_event_query.c
@@ -494,8 +494,8 @@ void WM_event_xr_data(const wmEvent *event,
float controller_rot[4],
float controller_loc_other[3],
float controller_rot_other[4],
- float eye_viewmat[4][4],
float *eye_lens,
+ float eye_viewmat[4][4],
bool *bimanual)
{
const wmXrActionData *data = event->customdata;
@@ -530,12 +530,12 @@ void WM_event_xr_data(const wmEvent *event,
if (controller_rot_other) {
copy_v4_v4(controller_rot_other, data->controller_rot_other);
}
- if (eye_viewmat) {
- copy_m4_m4(eye_viewmat, data->eye_viewmat);
- }
if (eye_lens) {
*eye_lens = data->eye_lens;
}
+ if (eye_viewmat) {
+ copy_m4_m4(eye_viewmat, data->eye_viewmat);
+ }
if (bimanual) {
*bimanual = data->bimanual;
}
diff --git a/source/blender/windowmanager/xr/intern/wm_xr_action.c b/source/blender/windowmanager/xr/intern/wm_xr_action.c
index aaaf56a5deb..f98566b02db 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_action.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr_action.c
@@ -424,6 +424,9 @@ bool WM_xr_active_action_set_set(wmXrData *xr, const char *action_set_name)
if (action_set->controller_pose_action) {
wm_xr_session_controller_data_populate(action_set->controller_pose_action, xr);
}
+ else {
+ wm_xr_session_controller_data_clear(&xr->runtime->session_state);
+ }
return true;
}
diff --git a/source/blender/windowmanager/xr/intern/wm_xr_draw.c b/source/blender/windowmanager/xr/intern/wm_xr_draw.c
index bd0ff8c7db1..c1b6e2ad8cf 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_draw.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr_draw.c
@@ -85,11 +85,12 @@ static void wm_xr_draw_matrices_create(const wmXrDrawData *draw_data,
const GHOST_XrDrawViewInfo *draw_view,
const XrSessionSettings *session_settings,
const wmXrSessionState *session_state,
- float r_view_mat[4][4],
- float r_proj_mat[4][4])
+ float r_viewmat[4][4],
+ float r_viewmat_base[4][4],
+ float r_projmat[4][4])
{
GHOST_XrPose eye_pose;
- float eye_inv[4][4], base_inv[4][4], nav_inv[4][4], m[4][4];
+ float eye_inv[4][4], base_inv[4][4], nav_inv[4][4];
/* Calculate inverse eye matrix. */
copy_qt_qt(eye_pose.orientation_quat, draw_view->eye_pose.orientation_quat);
@@ -105,10 +106,10 @@ static void wm_xr_draw_matrices_create(const wmXrDrawData *draw_data,
/* Apply base pose and navigation. */
wm_xr_pose_scale_to_imat(&draw_data->base_pose, draw_data->base_scale, base_inv);
wm_xr_pose_scale_to_imat(&session_state->nav_pose_prev, session_state->nav_scale_prev, nav_inv);
- mul_m4_m4m4(m, eye_inv, base_inv);
- mul_m4_m4m4(r_view_mat, m, nav_inv);
+ mul_m4_m4m4(r_viewmat_base, eye_inv, base_inv);
+ mul_m4_m4m4(r_viewmat, r_viewmat_base, nav_inv);
- perspective_m4_fov(r_proj_mat,
+ perspective_m4_fov(r_projmat,
draw_view->fov.angle_left,
draw_view->fov.angle_right,
draw_view->fov.angle_up,
@@ -151,13 +152,14 @@ void wm_xr_draw_view(const GHOST_XrDrawViewInfo *draw_view, void *customdata)
const int display_flags = V3D_OFSDRAW_OVERRIDE_SCENE_SETTINGS | settings->draw_flags;
- float viewmat[4][4], winmat[4][4];
+ float viewmat[4][4], viewmat_base[4][4], winmat[4][4];
BLI_assert(WM_xr_session_is_ready(xr_data));
wm_xr_session_draw_data_update(session_state, settings, draw_view, draw_data);
- wm_xr_draw_matrices_create(draw_data, draw_view, settings, session_state, viewmat, winmat);
- wm_xr_session_state_update(settings, draw_data, draw_view, viewmat, session_state);
+ wm_xr_draw_matrices_create(
+ draw_data, draw_view, settings, session_state, viewmat, viewmat_base, winmat);
+ wm_xr_session_state_update(settings, draw_data, draw_view, viewmat, viewmat_base, session_state);
if (!wm_xr_session_surface_offscreen_ensure(surface_data, draw_view)) {
return;
diff --git a/source/blender/windowmanager/xr/intern/wm_xr_intern.h b/source/blender/windowmanager/xr/intern/wm_xr_intern.h
index a8ceb8337d6..5c4a9717ff5 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_intern.h
+++ b/source/blender/windowmanager/xr/intern/wm_xr_intern.h
@@ -27,8 +27,10 @@
struct wmXrActionSet;
typedef struct wmXrEyeData {
- float viewmat[4][4];
float focal_len;
+ float viewmat[4][4];
+ /** Viewmat without navigation applied. */
+ float viewmat_base[4][4];
} wmXrEye
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list