[Bf-blender-cvs] [8b701bb] HMD_viewport: Hook up HMD with camera
Julian Eisel
noreply at git.blender.org
Wed Mar 16 16:10:53 CET 2016
Commit: 8b701bb913c8de194fd92c3cb8410d6667007d0c
Author: Julian Eisel
Date: Thu Mar 10 06:22:54 2016 +0100
Branches: HMD_viewport
https://developer.blender.org/rB8b701bb913c8de194fd92c3cb8410d6667007d0c
Hook up HMD with camera
===================================================================
M intern/ghost/intern/GHOST_OpenHMDManager.cpp
M release/scripts/startup/bl_ui/properties_render_layer.py
M source/blender/editors/space_view3d/view3d_edit.c
M source/blender/editors/space_view3d/view3d_intern.h
M source/blender/editors/space_view3d/view3d_ops.c
M source/blender/makesdna/DNA_scene_types.h
M source/blender/makesrna/intern/rna_scene.c
===================================================================
diff --git a/intern/ghost/intern/GHOST_OpenHMDManager.cpp b/intern/ghost/intern/GHOST_OpenHMDManager.cpp
index 7a389d3..fe9f171 100644
--- a/intern/ghost/intern/GHOST_OpenHMDManager.cpp
+++ b/intern/ghost/intern/GHOST_OpenHMDManager.cpp
@@ -61,15 +61,20 @@ bool GHOST_OpenHMDManager::processEvents()
GHOST_EventOpenHMD *event = new GHOST_EventOpenHMD(now, m_system.getWindowManager()->getActiveWindow());
GHOST_TEventOpenHMDData* data = (GHOST_TEventOpenHMDData*) event->getData();
-
- ohmd_device_getf(m_device, OHMD_ROTATION_QUAT, data->orientation);
-
- printf("sending openhmd event with data x y z w %f %f %f %f at time %llu\n",
- data->orientation[0],
- data->orientation[1],
- data->orientation[2],
- data->orientation[3],
- now);
+ float quat[4];
+
+ ohmd_device_getf(m_device, OHMD_ROTATION_QUAT, quat);
+ data->orientation[0] = quat[3];
+ data->orientation[1] = quat[0];
+ data->orientation[2] = quat[1];
+ data->orientation[3] = quat[2];
+
+// printf("sending openhmd event with data x y z w %f %f %f %f at time %llu\n",
+// data->orientation[0],
+// data->orientation[1],
+// data->orientation[2],
+// data->orientation[3],
+// now);
m_system.pushEvent(event);
diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py b/release/scripts/startup/bl_ui/properties_render_layer.py
index 13150c5..0ae63cf 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -226,7 +226,7 @@ class RENDERLAYER_PT_views(RenderLayerButtonsPanel, Panel):
row.prop(rv, "camera_suffix", text="")
else:
col = layout.column()
- col.prop(rd, "hmd_camera_lock")
+ col.prop(rd, "hmd_camlock")
col.operator("wm.hmd_view_open")
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 718696b..74c9995 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4800,6 +4800,51 @@ void VIEW3D_OT_enable_manipulator(wmOperatorType *ot)
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}
+/* ***************** TODO ******************* */
+
+typedef struct HMDData {
+ float orientation[4];
+} HMDData;
+
+static int hmd_refresh_poll(bContext *C)
+{
+ Scene *scene = CTX_data_scene(C);
+ return (scene->r.scemode & R_HMD_USE_CAM) != 0;
+}
+
+static int hmd_refresh_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
+{
+ Scene *scene = CTX_data_scene(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ Object *camera_ob = v3d ? v3d->camera : scene->camera;
+ HMDData *data = event->customdata;
+ float quad[4] = {M_SQRT1_2, M_SQRT1_2, 0.0f, 0.0f};
+
+ mul_qt_qtqt(camera_ob->quat, quad, data->orientation);
+ normalize_qt(camera_ob->quat);
+ loc_quat_size_to_mat4(camera_ob->obmat, camera_ob->loc, camera_ob->quat, camera_ob->size);
+
+ DAG_id_tag_update(&camera_ob->id, 0); /* sets recalc flags */
+ ED_region_tag_redraw(CTX_wm_region(C));
+
+ return OPERATOR_FINISHED;
+}
+
+void VIEW3D_OT_hmd_refresh(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Refresh HMD Data";
+ ot->description = "Updates the orientation of the head mounted display";
+ ot->idname = "VIEW3D_OT_hmd_refresh";
+
+ /* api callbacks */
+ ot->invoke = hmd_refresh_invoke;
+ ot->poll = hmd_refresh_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_INTERNAL;
+}
+
/* ************************* below the line! *********************** */
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index c398356..f0a36ef 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -271,6 +271,7 @@ void VIEW3D_OT_snap_cursor_to_grid(struct wmOperatorType *ot);
void VIEW3D_OT_snap_cursor_to_center(struct wmOperatorType *ot);
void VIEW3D_OT_snap_cursor_to_selected(struct wmOperatorType *ot);
void VIEW3D_OT_snap_cursor_to_active(struct wmOperatorType *ot);
+void VIEW3D_OT_hmd_refresh(struct wmOperatorType *ot);
/* space_view3d.c */
ARegion *view3d_has_buttons_region(ScrArea *sa);
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index a5411da1..c7c5399 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -218,6 +218,7 @@ void view3d_operatortypes(void)
WM_operatortype_append(VIEW3D_OT_snap_cursor_to_center);
WM_operatortype_append(VIEW3D_OT_snap_cursor_to_selected);
WM_operatortype_append(VIEW3D_OT_snap_cursor_to_active);
+ WM_operatortype_append(VIEW3D_OT_hmd_refresh);
transform_operatortypes();
}
@@ -504,6 +505,8 @@ void view3d_keymap(wmKeyConfig *keyconf)
WM_keymap_add_menu(keymap, "VIEW3D_MT_snap", SKEY, KM_PRESS, KM_SHIFT, 0);
+ WM_keymap_add_item(keymap, "VIEW3D_OT_hmd_refresh", EVT_VR_TRANSFORM, KM_ANY, KM_ANY, 0);
+
#ifdef __APPLE__
WM_keymap_add_item(keymap, "VIEW3D_OT_copybuffer", CKEY, KM_PRESS, KM_OSKEY, 0);
WM_keymap_add_item(keymap, "VIEW3D_OT_pastebuffer", VKEY, KM_PRESS, KM_OSKEY, 0);
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 005cfe6..ce64c56 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1657,7 +1657,7 @@ typedef struct Scene {
#define R_VIEWPORT_PREVIEW 0x80000
#define R_EXR_CACHE_FILE 0x100000
#define R_MULTIVIEW 0x200000
-#define R_HMD_USE_CAM 0x400000
+#define R_HMD_USE_CAM 0x400000
/* r->stamp */
#define R_STAMP_TIME 0x0001
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 285fe8c..92fe4a8 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -808,6 +808,14 @@ static void rna_RenderSettings_stereoViews_begin(CollectionPropertyIterator *ite
rna_iterator_listbase_begin(iter, &rd->views, rna_RenderSettings_stereoViews_skip);
}
+static void rna_RenderSettings_hmd_camlock_update(
+ struct Main *UNUSED(main), struct Scene *scene,
+ struct PointerRNA *UNUSED(ptr))
+{
+ Object *camera_ob = scene->camera;
+ DAG_id_tag_update(&camera_ob->id, OB_RECALC_OB);
+}
+
static char *rna_RenderSettings_path(PointerRNA *UNUSED(ptr))
{
return BLI_sprintfN("render");
@@ -5915,10 +5923,10 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "SceneRenderView");
RNA_def_property_ui_text(prop, "Render Views", "");
- prop = RNA_def_property(srna, "hmd_camera_lock", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_HMD_USE_CAM);
- RNA_def_property_ui_text(prop, "HMD Rotation", "Use the rotation of a head mounted display if available");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+ prop = RNA_def_property(srna, "hmd_camlock", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_HMD_USE_CAM);
+ RNA_def_property_ui_text(prop, "HMD Rotation", "Use the rotation of a head mounted display if available");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_RenderSettings_hmd_camlock_update");
prop = RNA_def_property(srna, "use_multiview", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_MULTIVIEW);
More information about the Bf-blender-cvs
mailing list